当前位置: 首页 > 后端技术 > Java

IO初级知识点整理

时间:2023-04-02 00:32:35 Java

1.字符编码:在计算机中存储的都是二进制,称为:byte各种字符和标点符号在计算机中称为:character2.Java中存储和读取字符时当我们需要显示字符时,我们会将字节转换为字符。这个过程称为:解码。计算机在存储字符时,会将字符转换成字节。这个过程称为:编码3.常用字符表:ASCII:最早的码表,因为其他码表都包含ASCII码表,也称为基本码表一般为3个字节(世界上所有文字都支持)4、String类的解码:解码:String(byte[],Stringencoding)将字节数组解码成指定码表的字符串,即字节变成字符。(参数1:字节数组,参数2:码表名)Encoding:getBytes(Stringencoding)将字符编码成指定码表的字节数组,即字符变成字节,(参数:码表名)示例代码:publicstaticvoidmain(String[]args)throwsUnsupportedEncodingException{//键盘输入字符Scannersc=newScanner(System.in);Stringstr=sc.nextLine();//字符转字节-编码byte[]arrByte=str.getBytes("UTF-8");System.out.println(Arrays.toString(arrByte));//字节转字符-解码Strings=newString(arrByte,"UTF-8");System.out.println(s);}乱码:原因:编解码使用的码表不同。解决方法:解码和编码时使用同一个码表。5、文件操作——文件类5.1简介&介绍:在以后的开发中,经常会涉及到需要对硬盘文件/硬盘目录进行操作,以便能够对硬盘数据进行操作。Java中提供了java.io.File类来表示文件或目录————————————————————————注:1:该类用于文件或目录操作2:该类本身不具备对文件目录或文件读写数据的功能//示例代码:publicstaticvoidmain(String[]args){//获取文件目录Filef1=newFile("java411/java01");System.out.println(f1);System.out.println(f1.exists());//获取文件Filef2=newFile("java411/io.txt");System.out.println(f2);System.out.println(f2.exists());//注意:file获取的文件或者目录不一定存在//exists()这个函数主要判断硬盘上是否真的存在某个文件/目录,true—存在,false—不存在}5.2:相对路径和绝对路径:绝对路径:带盘符的完整路径。相对路径:没有盘符的路径。绝对路径:理论上从硬盘的根目录开始可以理解为从我的电脑开始,需要加上盘符,实际上是从某个盘符的根目录开始相对路径:在idea中,默认从当前项目的根目录开始5.3:常用API:判断方法:exists()判断文件/目录是否存在isFile()判断对象是否为文件IsDirectory()判断对象是否为目录IsHidden()判断对象是否为隐藏文件或目录publicstaticvoidmain(String[]args){Filef=newFile("java411/io.txt");//判断文件是否存在System.out.println(f.exists());//true—存在,false—不存在//判断是否为文件System.out.println(f.isFile());//true—文件,false—不存在afile//判断是否是目录System.out.println(f.isDirectory());//true-目录,false-不是目录//判断文件是否隐藏System.out.println(f.isHidden());//true-隐藏,false-不隐藏}属性读取方法:GetName()获取文件/目录名Length()获取文件的字节数,只判断文件,不判断目录,如果对象是目录,返回结果不确定GetAbsolutePath()获取文件/目录的绝对路径Getpath()获取文件/目录的路径LastModified()获取文件最后修改时间(毫秒))File[]listRoots()获取操作系统的所有盘符publicstaticvoidmain(String[]args){//读取一个文件Filef=newFile("java411/io.txt");//获取文件/目录名System.out.println(f.getName());//显示文件名//获取文件的字节数,只能判断文件,不能判断目录System.out.println(f.length());//显示字节数bytes//获取文件System的绝对路径。out.println(f.getAbsolutePath());//显示绝对路径//获取文件最后修改时间(毫秒)System.out.println(newDate(f.lastModified()).toLocaleString());//获取操作系统所有的字符盘System.out.println(f.listFiles());//显示所有的字符盘}createNewFile()当文件不存在时创建一个空文件,创建成功返回true,失败返回false;mkdir()当目录不存在时创建一个空目录,创建成功返回true,失败返回false创建多个目录,mkdirs当目录链不存在时创建一个空目录链,创建一个或多个目录成功,返回true,失败返回false//示例代码publicstaticvoidmain(String[]args)throwsIOException{//创建目录链//需要在java411下创建sll目录,在sll目录下创建birthday//1:首先封装目录入文件Filef=newFile("java411/sll/birthday");System.out.println(f.exists());//现在不存在//调用mkdirs创建一系列目录链booleanf1=f.mkdirs();System.out.println(f1);System.out.println("-----------");//目录已经创建//2:创建文件//首先创建一个空文件到sll/birthdayFilef3=newFile("java411/sll/birthday/0429.txt");System.out.println(f3.exists());//此时不存在//创建密钥文件booleanf4=f3.createNewFile();System.out.println(f4);//true--已创建}//Getsubfiles&subdirectoriesString[]list()获取当前目录下的所有子文件和子目录名File[]listFiles()获取当前目录下的所有子文件和子目录//代码示例//获取子文件和子目录名Filefs=newFile("java411");String[]list=fs.list();for(Strings:list){System.out.println(s);}//获取子文件和子目录File[]fes=fs.listFiles();for(Filefe:fes){System.out.println(fe);}6.File类的其他构造File(Fileparent,Stringchild)从父抽象路径名和子路径名stringFile(Stringpathname)通过将给定的路径名??字符串转换为抽象路径名File(Stringparent,Stringchild)创建一个新的File实例从父路径名字符串和子路径名字符串创建一个新的File实例publicstaticvoidmain(String[]args){//相对路径Filef1=newFile("test/test.txt");System.out.println(f1.exists());FileparentFile=newFile("test");System.out.println(parentFile.exists());//需求:知道父目录,获取父目录下的子文件/子文件夹Filef2=newFile(parentFile,"Test.txt");System.out.println(f2.exists());Filef3=newFile("Test","Test.txt");System.out.println(f3.exists());}7内容操作-数据读取和写作7.1简介:IO操作:InputOutput操作,即输入输出操作,对硬盘和内存进行操作(输入又叫读操作,输出又叫写操作),所以以后硬盘操作,内存操作,网络数据传输操作,都使用IO操作输入:将数据读入程序,(从文件中读取数据)输出:将数据写出程序,(将数据写入文件)分类:7.2输出流:7.2.1字符流:FileWriter(Filefile)为一个File对象构造一个FileWriter对象FileWriter(StringfileName)构造一个给定文件名的FileWriter对象FileWriter:字符输出流,带缓冲区,可以尽可能多地操作文本内容。缓冲区有大小和空间限制:默认8KBpublicstaticvoidmain(String[]args)throwsIOException{//字符输出流(characterstream)有缓冲区//Filef=newFile("D:/test/test1.txt")//文件不存在则创建,存在则覆盖FileWriterwriter=newFileWriter("D:/test/test1.txt");char[]arr="sll".toCharArray();writer.write(arr);writer.write("\r\n");writer.write("小姐");writer.write("你");//刷新缓冲区,将缓冲区数据刷新到硬盘文件writer.flush();//接收并关闭writer.close();}FileOutputSteam:字节输出流,输出所有内容publicstaticvoidmain(String[]args)throwsIOException{//字节输出流//如果文件不存在,则创建,如果存在则覆盖FileOutputStreamfos=newFileOutputStream("D:/test/test2.txt");//byte输出,无需新建flushbuffer操作fos.write("miss".getBytes("UTF-8"));fos.write("你".getBytes("UTF-8"));fos.close();}注意事项:1:不同系统的回车换行:Windows:\r\nLinux:\nMac:/r2:streamclosemultiplexingproblem:streamclose无法复用再次,否则会失败Exception:java.io.IOException:StreamClosed;3:Appendfilecontent:输出流默认进行文件数据覆盖操作7.3:输入流7.3.1字符输入流:适用于文本读取publicstaticvoidmain(String[]args)throwsIOException{//创建一个输入流对象。FileReaderreader=newFileReader("D:/Test/Test1.txt");//intread=reader.read();//System.out.println((char)read);//强制传输,将int到char//System.out.println((char)reader.read());字符[]arr=新字符[7];reader.read(arr);System.out.println(Arrays.toString(arr));//关闭reader.close();}字节输入流:适用于读取所有其他文件8.commons-io8.1FileUtils:8.1-1:文件写入方式:字符输入:writerStringToFile(Filefile,Stringdata,Stringencoding)将字符串数据写入文件file,使用encoding指定的编码格式,该方法会覆盖文件原有内容。writerStringToFile(Filefile,Stringdata,Stringencoding,booleanappend)将字符串数据写入文件file,使用encoding指定的编码格式,append:True:不会覆盖文件原有内容,追加数据到原始文件后的内容。false:文件原有内容将被覆盖代码示例:publicstaticvoidmain(String[]args)throwsIOException{//创建一个字符串Stringdata="sll";//将字符串添加到字符串中——append(true—不会覆盖文件原有内容,false—会覆盖文件原有内容)FileUtils.writeStringToFile(newFile("sll/miss/birthday"),data,"UTF-8",true);}byteinput:writeByteArrayToFile(Filefile,byte[]data)将字节数组数据写入文件file,该方法会覆盖文件的原始内容writeByteArrayToFile(Filefile,byte[]data,booleanappend)写入byte数组数据放入文件file,append:True:不会覆盖文件原有内容,在文件原有内容后追加数据。false:会覆盖文件原有内容。writeByteArrayToFile(Filefile,byte[]data,intoff,intlen,booleanappend)将字节数组数据写入文件file。off:向外写入实际索引(从0开始,包括开头)Len:向外写入几个字节Append:True:不会覆盖文件原有内容,在文件原有内容后追加数据.false:会覆盖文件原来的内容publicstaticvoidmain(String[]args)throwsIOException{//创建一个字符串Stringstr="miss,you";//转换为字节字符byte[]data=str.getBytes("UTF-8");//覆盖文件原有代码操作字节数组索引,len-写入的字节数)FileUtils.writeByteArrayToFile(newFile("sll/miss/birthday.txt"),data,0,4,false);}8.2目录操作方式:复制&移动:copyDirectory(FilesrcDir,FileDestdir)——复制内容将srcDir目录下的内容复制到destDir目录下(如果destDir目录下有同名内容会被覆盖,其他目录不变)copyToDirectory(Filesrc,FiledestDir)——Copythewhole将src文件或目录(以及目录下的所有内容)复制到destDir目录下(如果destDir目录下有同名内容会被覆盖,并且其他目录不变)copyFile(FilesrcFile,FiledestFile)——复制文件将srcFile文件的内容复制到destFile文件中,如果destfile文件不存在,则创建MoveDirectory(FilesrcFile,FiledestSrc)——整体移动到(可重命名)移动并更改srcDir目录和目录中的所有内容创建destDir目录movetoDirectory(Filesrc,FiledestDir,booleancreateDestDir)——整体移动到(不可重命名)剪切src文件或目录到destDir目录createDestDir:True:当destDir目录不存在时false:当destDir目录链不存在时,抛出IOException异常copyDirectory(newFile("sll/miss"),newFile("sll/I"));//把miss整体复制给你(整个复制包含目录)FileUtils.copyToDirectory(newFile("sll/miss"),newFile("sll/you"));//复制文件sll——如果不存在则创建FileUtils.copyFile(newFile("sll/miss/birthday.txt"),newFile("sll/0429"));//将miss中的生日文件移动到birthdayFileUtils.moveFile(newFile("sll/miss/birthday.txt"),newFile("tw/you"));//移动错过twFileUtils.moveToDirectory(newFile("sll/miss"),newFile("tw/a"),true);}****搜索和统计:CollectionlistFiles(Filedir,string[]exts,booleanrecursive)在dir目录下查找指定扩展名的文件exts:如果指定扩展名为null,表示没有Recursive:如果为false,表示不查找子目录,如果为true,它表示目录CollectionlistFilesAndDirs(Filedir,IOFileFilterfileFiler,IOFileFilerdirFilter)Dir:searched中的所有内容目录;FileFilter:TrueFileFilter.INSTANCE:表示查找所有文件FalseFileFilter.INSTANCE:表示不查找任何文件其他要求需要实现IOFileFilter接口DirFilter:TrueFileFilter.INSTANCE:表示查找所有文件FalseFileFilter.INSTANCE:表示不查找任何文件其他需求需要自己实现IOFileFilter接口SizeOf(Filefile):读取文件或目录的字节数(注意:文件类的length方法不能读取目录的字节数)Clean&Delete:CleanDirectory(Filedirectory):清除指定目录下的所有内容,不会删除目录本身DeleteDirectory(Filedirectory):删除指定目录下的所有内容,同时删除目录本身注意:删除功能只能删除文件或空目录,并且非空目录没有其他方法