位元組輸出流(OutputStream)
java.io.OutputStream
是位元組輸出流的超類(父類),我們來看一下它定義的一些共性方法:
1、 close()
:關閉此輸出流並釋放與此流相關聯的系統資源。
2、 flush()
:重新整理此輸出流並強制緩衝區的位元組被寫入到目的地。
3、 write(byte[] b)
:將 b.length 個位元組從指定的位元組陣列寫入此輸出流。
4、 write(byte[] b, int off, int len)
:從指定的位元組陣列寫入 len 位元組到此輸出流,從偏移量 off開始。 也就是說從off個位元組數開始一直到len個位元組結束
FileOutputStream 類
構造方法
1、使用檔名建立 FileOutputStream 物件。
String fileName = "example.txt";
FileOutputStream fos = new FileOutputStream(fileName);
以上程式碼使用檔名 "example.txt" 建立一個 FileOutputStream 物件,將資料寫入到該檔案中。如果檔案不存在,則建立一個新檔案;如果檔案已經存在,則覆蓋原有檔案。
2、使用檔案物件建立 FileOutputStream 物件。
File file = new File("example.txt");
FileOutputStream fos = new FileOutputStream(file);
寫入位元組資料
寫入位元組 write(int b)
每次可以寫入一個位元組:
// 使用檔名稱建立流物件
FileOutputStream fos = new FileOutputStream("fos.txt");
// 寫出資料
fos.write(97); // 第1個位元組
fos.write(98); // 第2個位元組
fos.write(99); // 第3個位元組
// 關閉資源
fos.close();
寫入位元組陣列:write(byte[] b)
// 使用檔名稱建立流物件
FileOutputStream fos = new FileOutputStream("fos.txt");
// 字串轉換為位元組陣列
byte[] b = "xxx".getBytes();
// 寫入位元組陣列資料
fos.write(b);
// 關閉資源
fos.close();
寫入指定長度位元組陣列:write(byte[] b, int off, int len)
// 使用檔名稱建立流物件
FileOutputStream fos = new FileOutputStream("fos.txt");
// 字串轉換為位元組陣列
byte[] b = "abcde".getBytes();
// 從索引2開始,2個位元組。索引2是c,兩個位元組,也就是cd。
fos.write(b,2,2);
// 關閉資源
fos.close();
資料追加、換行
使用檔名和追加標誌建立 FileOutputStream 物件:
String fileName = "example.txt";
boolean append = true;
FileOutputStream fos = new FileOutputStream(fileName, append);
使用檔案物件和追加標誌建立 FileOutputStream 物件:
File file = new File("example.txt");
boolean append = true;
FileOutputStream fos = new FileOutputStream(file, append);
實現資料追加程式碼如下:
// 使用檔名稱建立流物件
FileOutputStream fos = new FileOutputStream("fos.txt",true);
// 字串轉換為位元組陣列
byte[] b = "abcde".getBytes();
// 寫出從索引2開始,2個位元組。索引2是c,兩個位元組,也就是cd。
fos.write(b);
// 關閉資源
fos.close();
在 Windows 系統中,換行符號是\r\n
,在 macOS 系統中,換行符是 \n
。
位元組輸入流
java.io.InputStream
是位元組輸入流的超類(父類),我們來看一下它的一些共性方法:
1、close()
:關閉此輸入流並釋放與此流相關的系統資源。
2、int read()
: 從輸入流讀取資料的下一個位元組。
3、read(byte[] b)
: 該方法返回的 int 值代表的是讀取了多少個位元組,讀到幾個返回幾個,讀取不到返回-1
FileInputStream 類
構造方法
1、FileInputStream(String name)
:建立一個 FileInputStream 物件,並開啟指定名稱的檔案進行讀取。檔名由 name 引數指定。如果檔案不存在,將會丟擲 FileNotFoundException 異常。
2、FileInputStream(File file)
:建立一個 FileInputStream 物件,並開啟指定的 File 物件表示的檔案進行讀取。
程式碼示例如下:
// 建立一個 FileInputStream 物件
FileInputStream fis = new FileInputStream("test.txt");
// 讀取檔案內容
int data;
while ((data = fis.read()) != -1) {
System.out.print((char) data);
}
// 關閉輸入流
fis.close();
讀取方法
讀取位元組:read()
讀取一個位元組並返回其整數表示。如果已經到達檔案的末尾,則返回 -1。如果在讀取時發生錯誤,則會丟擲 IOException 異常:
// 建立一個 FileInputStream 物件
FileInputStream fis = new FileInputStream("test.txt");
// 讀取檔案內容
int data;
while ((data = fis.read()) != -1) {
System.out.print((char) data);
}
// 關閉輸入流
fis.close();
使用位元組陣列讀取:read(byte[] b)
從輸入流中最多讀取 b.length 個位元組,並將它們儲存到緩衝區陣列 b 中:
// 建立一個 FileInputStream 物件
FileInputStream fis = new FileInputStream("test.txt");
// 讀取檔案內容到緩衝區
byte[] buffer = new byte[1024];
int count;
while ((count = fis.read(buffer)) != -1) {
System.out.println(new String(buffer, 0, count));
}
// 關閉輸入流
fis.close();
複製圖片
// 建立一個 FileInputStream 物件以讀取原始圖片檔案
FileInputStream fis = new FileInputStream("original.jpg");
// 建立一個 FileOutputStream 物件以寫入複製後的圖片檔案
FileOutputStream fos = new FileOutputStream("copy.jpg");
// 建立一個緩衝區陣列以儲存讀取的資料
byte[] buffer = new byte[1024];
int count;
// 讀取原始圖片檔案並將資料寫入複製後的圖片檔案
while ((count = fis.read(buffer)) != -1) {
fos.write(buffer, 0, count);
}
// 關閉輸入流和輸出流
fis.close();
fos.close();