io流-檔案流
阿新 • • 發佈:2021-07-30
FileOutputStream類(jdk1.0)
描述
- java.io.FileOutputStream 類是檔案位元組輸出流,用於將資料寫入到檔案中。
構造方法
//構造方法 FileOutputStream(File file) 建立檔案輸出流以寫入由指定的 File物件表示的檔案。 FileOutputStream(String name) 建立檔案輸出流以指定的名稱寫入檔案。 *引數 * file file:目的地是一個檔案 * string name:目的地是一個檔案路徑 //當你建立一個流物件時,必須先傳遞一個檔案路徑,該路徑下,如果沒有這個檔案,會建立該檔案 //,如果有這個檔案,會清空這個檔案中的資料。然後把你想要的資料寫入中。 FileOutputStream(File file,boolean append);建立檔案出入流以寫入由指定的File物件表示的檔案中。 FileOutputStream(String name,boolean append);建立檔案輸出流以指定的名稱寫入檔案中 //這兩個構造方法,引數中都需要傳入一個Boolean型別的值, //true表示的追加資料,false表示覆蓋原檔案
程式碼例項
public static void main(String[] args) throws IOException {
//FileOutputStream(String name) 建立檔案輸出流以指定的名稱寫入檔案。
FileOutputStream fops = new FileOutputStream("day28_IO\\a.txt");
//呼叫寫入方法
fops.write(97);
//關閉流
fops.close();
}
圖集分析
資料的追加續寫
- 如何在保留檔案中的資料,還能繼續新增新的資料到目標檔案中?
- 使用帶兩個引數地構造方法
程式碼例項
//建立物件 File file = new File("day28_IO\\c.txt"); FileOutputStream fops = new FileOutputStream(file,true); //呼叫write方法寫入 fops.write("張三".getBytes()); //關閉流 fops.close();
寫入換行
-
windows系統裡,換行符是: \r \n。把以指定是否需要追加續寫換行。
linux系統中,換行符號是: /r /n.
mac系統中,換行符號是 :/r
unix系統裡,每行結尾只有換行,即: \n -
回車符\r和換行符\n
回車符:回到一行的開頭。
換行符:下一行(new Line)。 -
系統中的換行:
windows系統中,每行結尾是:回車加換行。即,\r\n。
Linux系統中,每行的結尾只有換行,即,/n。
mac系統中,每行的結尾是回車,即,/r。
FileInputStream類
描述
- java.io.FileInputStream 類是檔案輸入流,從檔案中讀取位元組。
常用方法
//構造方法
FileInputStream(File file) 通過開啟與實際檔案的連線來建立一FileInputStream ,該檔案由檔案系統中的 File物件 file命名。
FileInputStream(String name) 通過開啟與實際檔案的連線來建立一個 FileInputStream ,該檔案由檔案系統中的路徑名 name命名。
//當你建立一個流物件時,必須傳入一個檔案路徑。該路徑下,如果沒有該檔案,會丟擲FileFoundException。
//普通方法
int available() 返回從此輸入流中可以讀取(或跳過)的剩餘位元組數的估計值,而不會被下一次呼叫此輸入流的方法阻塞。
讀取資料的原理
- java --> JVM --> OS --> OS呼叫系統中讀取資料的方法 -->讀取檔案中的資料
程式碼例項
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("C:\\c.txt");
int len = 0;
byte[] bytes = new byte[1024];
while ((len = fis.read(bytes)) != -1) {
//System.out.println(new String(bytes));
System.out.println(new String(bytes, 0, len));
}
fis.colos();
}
//可以使用位元組陣列來讀取資料:read(byte[] b):從輸入流中讀取多個位元組,並且將其儲存到緩衝區陣列b當中
-
備註;使用陣列讀取,每次可以讀取多個位元組,減少系統間的io操作次數,從而提高了讀取的效率,建議使用。
-
練習從系統中讀取一個圖片複製到桌面上
//1.建立一個位元組輸入流物件,構造方法中繫結需要讀取的路徑 //2.建立一個位元組輸出流物件,構造方法中繫結需要寫入的檔案 //3.使用位元組輸入流物件中的read方法讀取檔案 //4.使用位元組輸出流物件中的write方法,把讀取到位元組寫入到指定的檔案中 //5.釋放資源(先開的後關,後開的先關/相當於棧) //複製檔案 public static void main(String[] args) throws IOException { //來源 File source = new File("D:\\aa.jpeg"); //目的地 File destination = new File("E:\\bb.jpeg"); try (FileInputStream fis = new FileInputStream(source); FileOutputStream fos = new FileOutputStream(destination) ) { System.out.println(fis.available() + "available"); //public int available() throws IOException 獲取檔案位元組 byte[] arr = new byte[fis.available()]; int a = 0; while ((a = fis.read(arr)) != -1) { fos.write(arr); } } catch (IOException e) { e.printStackTrace(); } }