黑马程序员技术交流社区
标题: IO-三组方法来实现文件复制 [打印本页]
作者: asinzuo 时间: 2015-8-31 12:51
标题: IO-三组方法来实现文件复制
总结:对于输出到文件操作,用pw最省事,带换行、带刷新,名称短。
这里通过三组方法来实现文件复制,并揭示一个小现象。
FileReader 与PrintWriter 比较简便的文本操作方法
FileInputStream 与FileOutputStream 任何类型的文件都适用
BufferedReader 与BufferedWriter 带缓冲区,效率高
- /**
- * 复制硬盘上的文件,将f.txt数据复制到write.txt
- * @throws Exception
- */
- private static void readData1() throws Exception {
-
- //关联一个本地文件,f.txt,不加路径表示是当前目录
- //eclispe当期目录是当前的java project在硬盘的位置
- FileReader fr = new FileReader("f.txt");
-
- //关联一个硬盘上的文件,用于输出数据
- PrintWriter pw = new PrintWriter("write.txt");
-
- char[] buf = new char[1024]; //用char数组来存储读到的数据
- int len = 0; //用于表示char数组中新读取到的数据长度
- while((len=fr.read(buf))!=-1) //-1表示读到文件末尾,没读到文件末尾就一直读
- {
- //输出数据
- //最后一个char数组可能不是读满1024个字符,所以要指定输出的char数组的长度
- //因为print不支持输出指定长度的char数组,所以转成String,否则文件末尾会有很多空格
-
- pw.println(new String(buf,0,len));
- }
-
- fr.close(); //fr调用了底层资源,关闭资源
- pw.close(); //关闭资源,也起到了将数据刷到硬盘的作用
-
- }
复制代码
打开write.txt发现文件最后一行比源文件多了一个换行。是因为用了pw的println的原因吗?
用字节输出流来写数据试试。
- /**
- * 复制硬盘上的文件,将f.txt数据复制到write.txt
- * @throws Exception
- */
- private static void readData2() throws Exception {
- //源文件
- FileInputStream fis = new FileInputStream("f.txt");
- //关联一个硬盘上的文件,用于输出数据
- FileOutputStream fos = new FileOutputStream("write.txt");
- byte [] buf = new byte[1024]; //用byte数组来存储读到的数据
- int len = 0; //用于表示char数组中新读取到的数据长度
- while((len=fis.read(buf))!=-1) //-1表示读到文件末尾,没读到文件末尾就一直读
- {
- //输出数据
- //最后一个char数组可能不是读满1024个字符,所以要指定输出的char数组的长度
- //因为print不支持输出指定长度的char数组,所以转成String,否则文件末尾会有很多空格
- fos.write(buf,0,len);
- }
- //关闭资源
- fis.close();
- fos.close();
- }
复制代码
这次新文件最后没有换行了。
再试试用bufferwriter写数据
- /**
- * 复制硬盘上的文件,将f.txt数据复制到write.txt
- * @throws Exception
- */
- private static void readData3() throws Exception{
- //源文件
- BufferedReader bufr = new BufferedReader(new FileReader("f.txt"));
- //关联一个硬盘上的文件,用于输出数据
- BufferedWriter bufw = new BufferedWriter(new FileWriter("write.txt"));
- String line = null; //用line来存储读到的一行数据
- while((line=bufr.readLine())!=null) //null表示读到文件末尾,没读到文件末尾就一直读
- {
- //输出数据
- bufw.write(line);
- bufw.newLine(); //写一个换行符
- bufw.flush(); //将数据刷到硬盘上
- }
- //关闭资源
- bufr.close();
- bufw.close();
- }
复制代码
发现,新文件最后这次也多了个换行。
这里也是因为写了最后一行数据后,又写了一个换行符bufw.newLine();
所以还是字节流比较规范。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |