要寫入檔案,需要建立一個FileOutputStream
類的物件,它將表示輸出流。
// Create a file output stream
String destFile = "test.txt";
FileOutputStream fos = new FileOutputStream(destFile);
當寫入檔案時,如果檔案不存在,Java會嘗試建立檔案。但必須要處理這個異常,將程式碼放在try-catch
塊中,如下所示:
try {
FileOutputStream fos = new FileOutputStream(srcFile);
}catch (FileNotFoundException e){
// Error handling code goes here
}
如果檔案包含資料,資料將被擦除。 為了保留現有資料並將新資料追加到檔案,需要使用FileOutputStream
類的另一個建構函式,它接受一個布林標誌,用於將新資料附加到檔案。
要將資料追加到檔案,請在第二個引數中傳遞true
,使用以下程式碼。
FileOutputStream fos = new FileOutputStream(destFile, true);
FileOutputStream
類有一個過載的write()
方法將資料寫入檔案。可以使用不同版本的方法一次寫入一個位元組或多個位元組。
通常,使用FileOutputStream
寫入二進位制資料。要向輸出流中寫入諸如「Hello」
的字串,請將字串轉換為位元組。String
類有一個getBytes()
方法,該方法返回表示字串的位元組陣列。使用FileOutputStream
寫一個字串如下:
String destFile = "test.txt";
FileOutputStream fos = new FileOutputStream(destFile, true);
String text = "Hello";
byte[] textBytes = text.getBytes();
fos.write(textBytes);
要插入一個新行,使用line.separator
系統變數如下。
String lineSeparator = System.getProperty("line.separator");
fos.write(lineSeparator.getBytes());
需要使用flush()
方法重新整理輸出流。
fos.flush();
重新整理輸出流指示任何寫入的位元組緩衝清出,將資料可以寫入目標處。關閉輸出流類似於關閉輸入流。需要使用close()
方法關閉輸出流。
// Close the output stream
fos.close();
close()
方法可能丟擲一個IOException
異常。如果希望自動關閉,請使用try-with-resources
建立輸出流。
以下程式碼顯示如何將位元組寫入到檔案輸出流。
import java.io.File;
import java.io.FileOutputStream;
public class Main {
public static void main(String[] args) {
String destFile = "destfile.txt";
// Get the line separator for the current platform
String lineSeparator = System.getProperty("line.separator");
String line1 = "test";
String line2 = "test1";
String line3 = "test2";
String line4 = "test3";
try (FileOutputStream fos = new FileOutputStream(destFile)) {
fos.write(line1.getBytes());
fos.write(lineSeparator.getBytes());
fos.write(line2.getBytes());
fos.write(lineSeparator.getBytes());
fos.write(line3.getBytes());
fos.write(lineSeparator.getBytes());
fos.write(line4.getBytes());
// Flush the written bytes to the file
fos.flush();
System.out.println("Text has been written to "
+ (new File(destFile)).getAbsolutePath());
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
上面的程式碼生成以下結果。
Text has been written to F:\website\yiibai\worksp\destfile.txt
F:\website\yiibai\worksp\destfile.txt
檔案的內容如下: