要寫入文件,需要創(chuàng)建一個FileOutputStream
類的對象,它將表示輸出流。
// Create a file output stream
String destFile = "test.txt";
FileOutputStream fos = new FileOutputStream(destFile);
當寫入文件時,如果文件不存在,Java會嘗試創(chuàng)建文件。但必須要處理這個異常,將代碼放在try-catch
塊中,如下所示:
try {
FileOutputStream fos = new FileOutputStream(srcFile);
}catch (FileNotFoundException e){
// Error handling code goes here
}
如果文件包含數(shù)據(jù),數(shù)據(jù)將被擦除。 為了保留現(xiàn)有數(shù)據(jù)并將新數(shù)據(jù)追加到文件,需要使用FileOutputStream
類的另一個構造函數(shù),它接受一個布爾標志,用于將新數(shù)據(jù)附加到文件。
要將數(shù)據(jù)追加到文件,請在第二個參數(shù)中傳遞true
,使用以下代碼。
FileOutputStream fos = new FileOutputStream(destFile, true);
FileOutputStream
類有一個重載的write()
方法將數(shù)據(jù)寫入文件??梢允褂貌煌姹镜姆椒ㄒ淮螌懭胍粋€字節(jié)或多個字節(jié)。
通常,使用FileOutputStream
寫入二進制數(shù)據(jù)。要向輸出流中寫入諸如“Hello”
的字符串,請將字符串轉換為字節(jié)。String
類有一個getBytes()
方法,該方法返回表示字符串的字節(jié)數(shù)組。使用FileOutputStream
寫一個字符串如下:
String destFile = "test.txt";
FileOutputStream fos = new FileOutputStream(destFile, true);
String text = "Hello";
byte[] textBytes = text.getBytes();
fos.write(textBytes);
要插入一個新行,使用line.separator
系統(tǒng)變量如下。
String lineSeparator = System.getProperty("line.separator");
fos.write(lineSeparator.getBytes());
需要使用flush()
方法刷新輸出流。
fos.flush();
刷新輸出流指示任何寫入的字節(jié)緩沖清出,將數(shù)據(jù)可以寫入目標處。關閉輸出流類似于關閉輸入流。需要使用close()
方法關閉輸出流。
// Close the output stream
fos.close();
close()
方法可能拋出一個IOException
異常。如果希望自動關閉,請使用try-with-resources
創(chuàng)建輸出流。
以下代碼顯示如何將字節(jié)寫入到文件輸出流。
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
文件的內(nèi)容如下: