java控制io_Java-IO操作
IO流包括字節流(Byte)和字符流(String/char)
字節流:
在JDK中定義了兩個抽象類InputStream和OutputStream,它們是字節流的頂級父親。
InputStream的常用方法:
int read(),從輸入流讀取一個8位的字節,把它轉換為0~255之間的整數,并返回這一整數。
int read(byte[] b ),從輸入流讀取若干個字節,把它們保存到參數b指定的字節數組中,返回的整數表示讀取字節數。
int read(byte[] b ,int? off,int len),從輸入流讀取若干個字節,把它們保存到參數b指定的字節數組中,off指定字節數組開始保存數據的起始下標,len表示讀取的字節數目。
void close() 關閉此輸入流并釋放與該流關聯的所有系統資源。
OutputStream的常用方法:
void write(),像輸出流寫入一個8位的字節。
void?write(byte[] b ),參數b指定的字節數組的所有字節寫到輸出流。
void?read(byte[] b ,int? off,int len),把參數b指定的字節數組中從off指定開始的len個字節寫入輸入流。
void flush(),刷新此輸出流并強制寫出所有緩沖的輸出字節。
void close() 關閉此輸出流并釋放與該流關聯的所有系統資源。
FileInputStream
packagestream;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.IOException;importjava.io.InputStream;public classFileInputStreamDemo{public static voidmain(String[] args) {
File srcFile=new File("CopyStreamDemo.txt");try{
InputStream inputStream=newFileInputStream(srcFile);byte[] buffer=new byte[1024];int len=-1;while((len=inputStream.read(buffer))!=-1) {//從輸入流inputStream讀取若干字節,把它們保存到參數buffer中去,同時判斷是否讀到文件末尾
String text=new String(buffer,0, len, "utf-8");//將字節數組轉換為字符串
System.out.printf(text);
}
inputStream.close();
}catch(FileNotFoundException e) {
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}
}
}
FileOutputStream
1 packagestream;2
3 importjava.io.File;4 importjava.io.FileNotFoundException;5 importjava.io.FileOutputStream;6 importjava.io.IOException;7 importjava.io.OutputStream;8
9 public classFileOutputStreamDemo {10
11 public static voidmain(String[] args) {12 File desfile=new File("target.txt");13 try{14 String text="我的第一個記事本程序\r\n還有第二行";15 OutputStream os=newFileOutputStream(desfile);16 byte[] buffer=text.getBytes("utf-8");//將字符串轉換為字節數組17 os.write(buffer);18 System.out.println("文件寫入完成!");19 os.close();20 } catch(FileNotFoundException e) {21 e.printStackTrace();22 } catch(IOException e) {23 e.printStackTrace();24 }25 }26 }
此外,注意在IO包中提供的兩個帶緩沖的字節流,BufferedInputStream和BufferedOutputStream,它們的構造方法中分別接收InputStream和OutputStream類型的參數作為被包裝的對象。
1 importjava.io.BufferedInputStream;2 importjava.io.BufferedOutputStream;3 importjava.io.File;4 importjava.io.FileInputStream;5 importjava.io.FileNotFoundException;6 importjava.io.FileOutputStream;7 importjava.io.IOException;8
9 public classFileCopy{10 public static voidmain(String[] args) {11 File srcFile=new File("CopyStreamDemo.txt");12 File desFile=new File("target.java");13 try{14 /**
15 * 帶緩沖的字節流,BufferedInputStream和BufferedOutputStream,二者接收InputStream和OutputStream作為參數16 */
17 BufferedInputStream is=new BufferedInputStream(newFileInputStream(srcFile));18 BufferedOutputStream os=new BufferedOutputStream(newFileOutputStream(desFile));19 byte[] buffer=new byte[1024];20 int len=-1;21 System.out.println("正在復制文件,請稍后...");22 while((len=is.read(buffer))!=-1) {23 os.write(buffer,0,len);24 }25 System.out.println("文件復制完成!");26 is.close();27 os.close();28 } catch(FileNotFoundException e) {29 e.printStackTrace();30 } catch(IOException e) {31 e.printStackTrace();32 }33 }34 }
字符流:
字符流也有兩個頂級父親,分別是Reader和Writer,其中Reader是字符輸入流,用于從某個源設備讀取字符,Writer是字符輸出流,用于向某個目標設備寫入字符。
其中,FileReader和FileWriter用于讀寫文件,BufferedReader和BufferedWriter是具有緩沖功能的流,它們可以提高讀寫效率。
FileReader和FileWriter實現文件讀寫:
1 packagechars;2
3 importjava.io.File;4 importjava.io.FileNotFoundException;5 importjava.io.FileReader;6 importjava.io.FileWriter;7 importjava.io.IOException;8 importjava.io.Reader;9 importjava.io.Writer;10
11 public classCopyByCharsDemo {12 public static voidmain(String[] args) {13 File srcFile=new File("BufferedReaderDemo.txt");14 File desFile=new File("dest.txt");15 try{16 Reader reader=newFileReader(srcFile);17 Writer writer=newFileWriter(desFile);18 char[] buffer=new char[1024];19 int len=-1;20 while((len=reader.read(buffer))!=-1) {21 writer.write(buffer);22 }23 System.out.println("復制完成!");24 reader.close();25 writer.close();26 } catch(FileNotFoundException e) {27 e.printStackTrace();28 } catch(IOException e) {29 e.printStackTrace();30 }31
32 }33 }
BufferedReader
1 packagechars;2
3 importjava.io.BufferedReader;4 importjava.io.File;5 importjava.io.FileNotFoundException;6 importjava.io.FileReader;7 importjava.io.IOException;8 /**
9 * 文件Reader,BufferedReader同BufferedInputStream一樣,內部參數是new FileReader(srcFile)10 *@authorAdministrator11 *12 */
13 public classBufferedReaderDemo {14 public static voidmain(String[] args) {15 File srcFile=new File("CopyByCharsDemo.txt");16 try{17 BufferedReader bReader=new BufferedReader(newFileReader(srcFile));18 String res=null;19 while((res=bReader.readLine())!=null) {//每次讀取一行文本,判斷是否到文件結尾
20 System.out.println(res);21 }22 bReader.close();23 } catch(FileNotFoundException e) {24 e.printStackTrace();25 } catch(IOException e) {26 e.printStackTrace();27 }28 }29
30 }
總結:
1.文件讀取時,不論是用InputStream還是Reader還是BufferedInputStream讀取時都用len,while((len=is.read(buffer))!=-1),但是在BufferedReader中,定義一個String res=null,這時的判斷條件是 while((res=br.readLine())!=null)
2.文件讀寫完成后,記得要善后,即is.close()
總結
以上是生活随笔為你收集整理的java控制io_Java-IO操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 早报:谷歌Pixel 7a曝光 苹果Ho
- 下一篇: Redmi Note 12新版曝光 价格