一些小技巧。
一、知识点
(1)FileOutputStream fos = new FileOutputStream(b);
如果文件不存在,直接创建。如果文件存在,那就删除后重新创建。
FileOutputStream fos = new FileOutputStream(b,true);的true参数可以在源文件基础上进行追加
(2)flush()是什么?
涉及到缓冲区的问题.
java在使用流时,都会有一个缓冲区,按一种它认为比较高效的方法来发数据:把要发的数据先放到缓冲区,缓冲区放满以后再一次性发过去,而不是分开一次一次地发。
flush()表示强制将缓冲区中的数据发送出去,不必等到缓冲区满。
所以在用流的时候,如果没有用flush()这个方法,很多情况下会出现流的另一边读不到数据的问题,特别是在数据特别小的情况下。
我的理解:
输出流类似于一根管道,输出的时候先放到管道里,然后管道满了存到介质上(硬盘或其他地方),当我们输出完后管道里面可能还有剩余,就用flush()清空管道即全部存到介质上。
好象java默认的缓冲区是8kb,就是说只有每填满8kb才会提交一次,当少于这个值时就不会提交。所以最后为防止有未提交数据就flush()一下,强行提交剩余数据。
也就是说,一般输出流关闭之前要使用这个方法。
(3)关于bufferReader的方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
package io; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.UnsupportedEncodingException; public class testbuffercharstream { public static void main(String[] args) { try { // File file = new File("text.txt"); FileInputStream fis = new FileInputStream("text.txt"); InputStreamReader isr = new InputStreamReader(fis); FileOutputStream fos = new FileOutputStream("javanewbuffer.txt"); OutputStreamWriter osw = new OutputStreamWriter(fos); BufferedReader br = new BufferedReader(isr); // BufferedWriter bw = new BufferedWriter(osw); PrintWriter pw = new PrintWriter(osw); String input; while((input = br.readLine())!=null) { // readline()并不自动识别换行符 System.out.print(input); // bw.write(input)这种情况是不会自动换行的,用pw来代替 pw.println(input); } pw.flush(); br.close(); // bw.close(); isr.close(); fis.close(); osw.close(); System.out.println("done"); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } |
readline()不会自动换行。
(4)什么是printWriter?
printwriter是向文本输出流打印对象的格式化表示形式。可以将指定字符添加到此writer。
二、总结
记录一下。