Java是一门特别强大的面向对象的编程语言,不仅简洁方便,而且灵活多变。在它丰富的功能之一就可以操作文件。这几天有些小伙伴对文件操作不是很熟悉,也因为快到期末了,今天来实战演练一下,这样更方便理解与领悟。
首先对文件的操作肯定就会涉及到流的操作,这里先看一个IO流的类结构图。
这是一个经常使用到的一些输入输出流的类的继承树图。输入流或输出流又分为字节流和字符流,顾名思义就是以字节(二进制方式)或一个个字符进行输入和输出。在实际的业务中需要字节流还是字符流取决于业务需求是什么样的。
文件读取
首先我们要明白一个流程,我们要操作文件首先要创建一个操作文件的映射体或称为对象,然后再创建一个能够读取文件的对象,这样我们就可以把文件中的数据读取出来了。这里我的实例文件里填充的数据是字符,所以本例中采用的是字符流进行相关操作,下面用代码进行实战演练:
BufferedReaderreader=newBufferedReader(newFileReader("F:\\xujinshuo.txt")); Stringstr1=""; //读取的数据Stringline=""; //每行读取到的数据while ((line=reader.readLine()) !=null){ str1+=line.toUpperCase(); } reader.close(); //流用完就必须关闭
我们如果想读取F盘下的xujinshuo.txt文件,首先我们创建一个FileReader操作文件对象把文件的路径放进去,之后再用功能比较强大的BufferedReader缓冲流进行包装,每次读取文件中的一行数据,在循环内可以进行其他的操作,比如:转大小写,添加其他样式符号等,每次读取的行数据进行累加,循环结束时,文件指针走到最后刚好读完所有数据。
文件写入
BufferedWriterwriter=newBufferedWriter(newFileWriter("F:\\xujinshuo.txt",true)); writer.newLine(); //换行写入writer.write(str1); //str1是需要写入的字符串数据writer.close();
写入的操作和读取操作在第一步创建相应的输入输出对象的方式上基本上都是大同小异,特别注意的是new FileWriter()这个构造器的第二个参数如果是false或者不写,默认是覆盖写入,就是写入现有数据会覆盖文件原有数据,从头开始添加。我们追加数据到文件,就需要把第二参数设置为true,true代表是从原有数据后面追加新的数据。接下来只需调用BufferedWriter对象的writer方法写入数据即可,最后一步很重要就是别忘了关闭流,不关闭流很可能出现异常或报错。
文件重命名
文件重命名也是比较简单的,但是注意的细节不少,一不小心可能就会重命名失败。
Filefile1=newFile("F:\\xujinshuo.txt"); if (file1.renameTo(newFile("F:\\xujinshuo_new.txt"))){ System.out.println("文件重命名成功了!"); }else { System.out.println("文件重命名失败!"); }
通过创建一个文件对象File调用重命名方法renameTo,重命名成功该方法就会放回true,失败就会返回false。但是注意的是:1、重命名时文件扩展名不同。2、重命名前的源文件不存在。这两点任一一点存在都会导致该方法返回false从而重命名失败,需要特别注意。