I/O流(二)
常用I/O類的層次
1、InputStream
1.1、FileInputStream 字節流
1.2、FilterInputStream
1.2.1、BufferedInputStream
1.2.2、DataInputStream 讀取基礎數據類型 平臺無關
2、OutputStream
2.1、FileOutputStream
2.2、FilterOutputStream
2.2.1、BufferedOutputStream
2.2.2、DataOutputStream 寫入基礎數據類型 與平臺無關
3、Reader
3.1、BufferedReader 提供讀一行
3.2、InputStreamReader 提供讀字符而非字節
3.2.1、FileReader 直接使用文件名,無需組合
4、Writer
4.1、BufferedWriter
4.2、OutputStreamWriter
4.2.1、FileWriter 直接使用文件名,無需組合
4.3、PrintWriter 如屏幕輸出一樣方便
5、File
有關I/O的兩種觀點:
文本的觀點:不支持隨機訪問 BufferedReader
二進制的觀點(字節):支持隨機訪問 InputStream(圖片,視頻等)
文本文件的讀寫:
* PrintWriter(FileOutputStream) * 提供了豐富的輸出格式化。默認編碼方式 * FileWriter * 需顯式換行。默認編碼 * BufferedWriter(OutputStreamWriter) * 可指定編碼 * BufferredReader(InputStreamReader) * 可指定編碼從文件讀入信息,然后在輸出到另一個文件
/** //構建輸入流 BufferedReader bs=new BufferedReader(new InputStreamReader(new FileInputStream("d:/text01.txt"))); //從d:/text01.txt讀入//構建輸出流BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d:/test02.txt"))); //寫入d:/text02.txt // 等價于 PrintWriter pw=new PrintWriter(new FileOutputStream("d:/test02.txt")); //寫信息 for(;;){String s=br.readLine();if(s == null){break;}bw.write(s);// pw.println(s); } bw.flush(); //pw.flush();**/二進制文件的讀寫
* 直接操作字節 * FileInputStream FileOutputStream * 與平臺無關的讀寫 * DataInputStream DataOutputStream(支持隨機訪問) * 與編碼有關 * 先把串轉換為byte[ ]將一張圖片保存成txt模式,通過程序將它輸出為一張圖片格式的文件(文件存儲額的格式對文件本身的內容不會發生任何的影響)
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream;public class picture {public static void main(String[] args) {// TODO Auto-generated method stubtry {InputStream is=new FileInputStream("F:/私人物品劉夢冰/學習資料/exercise/beauty.txt");//構建輸入流OutputStream os=new FileOutputStream("F:/私人物品劉夢冰/學習資料/exercise/beauty.jpg");//構建輸出流byte[] buf=new byte[1024];for (;;) {//寫信息int n = is.read();if (n==-1) break; // os.write(n); //一個字節一個字節的讀,然后一個字節一個字節的往外寫,讀一個字節寫一個字節os.write(buf, 0, n);//從0開始寫,寫到n;把所有的內容全部讀到byte數組中之后再往外寫}os.flush();os.close();is.close();}catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} } }運行結果:
產生10*PI個數,寫入文件中,然后再從該文件中隨機讀取一個數
import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException;//產生10*PI個數,寫入文件中,然后再從該文件中隨機讀取一個數 public class DataOutput {public static void main(String[] args) {// TODO Auto-generated method stub//創建輸出流try {DataOutputStream dos = new DataOutputStream(new FileOutputStream("F:/私人物品劉夢冰/學習資料/exercise/dataOutputStream.dat"));for (int i = 0; i < 10; i++) {double d=Math.PI*i;dos.writeDouble(d); }dos.flush();dos.close();} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}//創建輸入流try {DataInputStream dis = new DataInputStream(new FileInputStream("F:/私人物品劉夢冰/學習資料/exercise/dataOutputStream.dat"));dis.skip(5*8);//讀取第五個數double d2=dis.readDouble();System.out.println(d2);} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}} }運行結果:
總結
- 上一篇: I/O流(一)
- 下一篇: I/O流(三)—对象的序列化和反序列化