字節流, FileOutputStream類,FileInputStream類,復制文件,字符流
阿新 • • 發佈:2018-08-23
不可 分享 不刷新 get 關閉流 color .get 繼續 str
字節輸出流OutputStream
OutputStream此抽象類,是表示輸出字節流的所有類的超類。操作的數據都是字節
基本方法:
子類可繼承調用以上方法
FileOutputStream類
構造方法:
FileOutputStream類寫入數據到文件中
例子:
package com.oracle.FileoutStream; import java.io.FileOutputStream; import java.io.IOException; public class OutPUTsteam { public static voidmain(String[] args) throws IOException { FileOutputStream f=new FileOutputStream("e:\\test\\bi.txt");//此構造方法,如果文件存在,則覆蓋 //沒有,則創建 // f.write(100);//字節流,結果為d,想輸出100,就寫三個字節,49,48,48 byte[] bytes={-65,-66,-67,-68};//烤郊 // byte[] bytes={65,66,67,68};//ABCD// f.write(bytes); f.write(bytes,1,2);//窘 /* FileOutputStream f=new FileOutputStream("e:\\test\\bi.txt",true);//在後面續寫,加true // f.write(bytes,1,2);//窘 String str="abcd\r\n";//\r\n換行 f.write(str.getBytes()); // new String(bytes); */ f.close(); } }
IO異常的處理
package com.oracle.FileoutStream; import java.io.FileOutputStream; import java.io.IOException; public class IoEXCEPTION { public static void main(String[] args) { //定義FileOutputStream的引用 FileOutputStream f=null; try{ //創建FileOutputStream對象 f=new FileOutputStream("e:\\test\\bi.txt"); //寫數據 f.write(100); }catch(IOException e){ throw new RuntimeException("文件寫入失敗");//一旦發生io異常,直接終止關閉 }finally{ try { //一定要判斷fos是否為null,只有不為null時,才可以關閉資源 if(f!=null){ f.close(); } } catch (IOException e) { throw new RuntimeException("關閉資源失敗"); } } } }
字節輸入流InputStream
int read():讀取一個字節並返回,沒有字節返回-1.
int read(byte[]): 讀取一定量的字節數,並存儲到字節數組中,返回讀取到的字節數。
FileInputStream類
FileInputStream類讀取數據read方法
public class FileInputStreamDemo { public static void main(String[] args) throws IOException { File file = new File("c:\\file.txt"); //創建一個字節輸入流對象,必須明確數據源,其實就是創建字節讀取流和數據源相關聯。 FileInputStream fis = new FileInputStream(file); //讀取數據。使用 read();一次讀一個字節。 int ch = 0; while((ch=fis.read())!=-1){ System.out.println("ch="+(char)ch); } // 關閉資源。 fis.close(); } }
讀取數據read(byte[])方法
public class FileInputStreamDemo2 { public static void main(String[] args) throws IOException { /* * 演示第二個讀取方法, read(byte[]); */ File file = new File("c:\\file.txt"); // 創建一個字節輸入流對象,必須明確數據源,其實就是創建字節讀取流和數據源相關聯。 FileInputStream fis = new FileInputStream(file); //創建一個字節數組。 byte[] buf = new byte[1024];//長度可以定義成1024的整數倍。 int len = 0; while((len=fis.read(buf))!=-1){ System.out.println(new String(buf,0,len)); } fis.close(); } }
字節流復制文件
public class CopyFileTest { public static void main(String[] args) throws IOException { //1,明確源和目的。 File srcFile = new File("c:\\YesDir\test.JPG"); File destFile = new File("copyTest.JPG"); //2,明確字節流 輸入流和源相關聯,輸出流和目的關聯。 FileInputStream fis = new FileInputStream(srcFile); FileOutputStream fos = new FileOutputStream(destFile); //3, 使用輸入流的讀取方法讀取字節,並將字節寫入到目的中。 int ch = 0; while((ch=fis.read())!=-1){ fos.write(ch); } //4,關閉資源。 fos.close(); fis.close(); } }
緩沖數組方式復制文件
public class CopyFileByBufferTest { public static void main(String[] args) throws IOException { File srcFile = new File("c:\\YesDir\test.JPG"); File destFile = new File("copyTest.JPG"); // 明確字節流 輸入流和源相關聯,輸出流和目的關聯。 FileInputStream fis = new FileInputStream(srcFile); FileOutputStream fos = new FileOutputStream(destFile); //定義一個緩沖區。 byte[] buf = new byte[1024]; int len = 0; while ((len = fis.read(buf)) != -1) { fos.write(buf, 0, len);// 將數組中的指定長度的數據寫入到輸出流中。 } // 關閉資源。 fos.close(); fis.close(); } }
這樣執行速度比一個一個讀寫要快
字符流
FileReader讀取包含中文的文件
public class CharStreamDemo { public static void main(String[] args) throws IOException { //給文件中寫中文 writeCNText(); //讀取文件中的中文 readCNText(); } //讀取中文 public static void readCNText() throws IOException { FileReader fr = new FileReader("D:\\test\\cn.txt"); int ch = 0; while((ch = fr.read())!=-1){ //輸出的字符對應的編碼值 System.out.println(ch); //輸出字符本身 System.out.println((char)ch); } } //寫中文 public static void writeCNText() throws IOException { FileOutputStream fos = new FileOutputStream("D:\\test\\cn.txt"); fos.write("歡迎你".getBytes()); fos.close(); } }
FileWriter寫入中文到文件中
public class FileWriterDemo { public static void main(String[] args) throws IOException { //演示FileWriter 用於操作文件的便捷類。 FileWriter fw = new FileWriter("d:\\text\\fw.txt"); fw.write("你好謝謝再見");//這些文字都要先編碼。都寫入到了流的緩沖區中。 fw.flush(); fw.close(); } }
flush和close的區別
flush():將流中的緩沖區緩沖的數據刷新到目的地中,刷新後,流還可以繼續使用。
close():關閉資源,但在關閉前會將緩沖區中的數據先刷新到目的地,否則丟失數據,然後在關閉流。流不可以使用。如果寫入數據多,一定要一邊寫一邊刷新,最後一次可以不刷新,由close完成刷新並關閉。
字符流復制文本文件
public class CopyTextFileTest { public static void main(String[] args) throws IOException { copyTextFile(); } public static void copyTextFile() throws IOException { //1,明確源和目的。 FileReader fr = new FileReader("c:\\cn.txt"); FileWriter fw = new FileWriter("c:\\copy.txt"); //2,為了提高效率。自定義緩沖區數組。字符數組。 char[] buf = new char[1024]; int len = 0; while((len=fr.read(buf))!=-1){ fw.write(buf,0,len); } /*2,循環讀寫操作。效率低。 int ch = 0; while((ch=fr.read())!=-1){ fw.write(ch); } */ //3,關閉資源。 fw.close(); fr.close(); } }
字節流, FileOutputStream類,FileInputStream類,復制文件,字符流