Java FileWriter
- Java FileWriter 類是
java.io
包的一部分。 - FileWriter 是
java.io.OutputStreamWriter
類的子類。 - FileWriter 用於寫入字符流。
- FileWriter 用於向字符文件寫入。其
write()
方法允許將字符或字符串寫入文件。 - 通常將 FileWriter 對象包裝在更高級別的 Writer 對象中,例如 BufferedWriter 或
PrintWriter
,這些對象提供更好的性能和更高級別、更靈活的方法來寫入數據。
FileWriter 構造函數
FileWriter(File file)
: 使用指定的 File 對象創建一個FileWriter
對象。如果文件存在但是一個目錄而不是普通文件,或者文件不存在但無法創建,或者由於任何其他原因無法打開,則會拋出IOException
。FileWriter(File file, boolean append)
: 使用指定的File對象創建一個FileWriter對象。如果第二個參數為true,則將字節寫入文件的末尾而不是開頭。如果文件存在但是目錄而不是常規文件,或者文件不存在但無法創建,或者無法因任何其他原因而打開,則會拋出IOException。FileWriter(FileDescriptor fd)
: 創建與指定文件描述符關聯的FileWriter對象。FileWriter(String fileName)
: 使用指定的fileName創建一個FileWriter對象。如果指定的文件存在但是目錄而不是常規文件,或者文件不存在但無法創建,或者無法因任何其他原因而打開,則會拋出一個IOException
。FileWriter(String fileName, boolean append)
: 使用指定的fileName創建一個FileWriter對象,並使用布爾值指示是否附加寫入的數據。如果第二個參數為true,則數據將寫入文件的末尾而不是開頭。如果指定的文件存在但是目錄而不是常規文件,或者文件不存在但無法創建,或者無法因任何其他原因而打開,則會拋出一個IOException。
Java FileWriter示例
FileWriter 繼承了 java.io.OutputStreamWriter
和 java.io.Writer
類別的方法。讓我們來看一下下面的方法及其示例。
write(int c)
該方法寫入由 int c 指定的單個字符。
package com.journaldev.io.filewriter;
import java.io.FileWriter;
import java.io.IOException;
/**
* Java write file using FileWriter write method
*
* @author pankaj
*
*/
public class FileWriterWriteIntExample {
public static void main(String[] args) {
FileWriter fileWriter = null;
try {
fileWriter = new FileWriter("D:/data/file.txt");
//從 java.io.OutputStreamWriter 繼承的方法
fileWriter.write(65);
fileWriter.write(66);
fileWriter.write(67);
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
if (fileWriter != null) {
fileWriter.flush();
fileWriter.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
FileWriter 實現了
AutoCloseable
接口,因此我們可以在使用 FileWriter 類時使用 try with resources。
package com.journaldev.io.filewriter;
import java.io.FileWriter;
/**
* Java write file using FileWriter write method using try with resource
*
* @author pankaj
*
*/
public class FileWriterWriteIntTryWithResource {
public static void main(String[] args) {
try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
//從 java.io.OutputStreamWriter 繼承的方法
fileWriter.write(65);
fileWriter.write(66);
fileWriter.write(67);
} catch (Exception e) {
e.printStackTrace();
}
}
}
注意: 在上面的程序中 fileWriter.write(65)
會將 A 寫入文件,因為 65 是字符 A 的十進制值,因此整數 65 將轉換為字符 A,其他情況類似。
write(String str, int off, int len)
該方法從字符串 str
的偏移量 off
到偏移量 len
寫入一部分。
- str: 要寫入的字符串
- off: 開始讀取字符的偏移量
- len:要寫入的字元數
如果 len 參數的值為負,則不會寫入任何字元。
package com.journaldev.io.filewriter;
import java.io.FileWriter;
/**
* Java write file using FileWriter write(String s, int off, int len) method
*
* @author pankaj
*
*/
public class FileWriterWriteStringExample {
public static void main(String[] args) {
String data = "This is FileWriter Example.";
try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
// 繼承自 java.io.OutputStreamWriter
fileWriter.write(data, 8, 10);
} catch (Exception e) {
e.printStackTrace();
}
}
}
write(char[] cbuf, int off, int len)
此方法會寫入由 char[] cbuf
指定的字元陣列的一部分,從 int off
到 int len
。
- cbuf:字元陣列
- off:開始讀取字元的偏移量
- len:要寫入的字元數
package com.journaldev.io.filewriter;
import java.io.FileWriter;
/**
* Java write file using FileWriter write(char[] cbuf, int off, int len) method
*
* @author pankaj
*
*/
public class FileWriterWriteCharArray {
public static void main(String[] args) {
char[] data = "This is FileWriter Example.".toCharArray();
try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
// 繼承自 java.io.OutputStreamWriter
fileWriter.write(data, 8, 10);
} catch (Exception e) {
e.printStackTrace();
}
}
}
write(char[] cbuf)
此方法會寫入由 cbuf 指定的字元陣列。
package com.journaldev.io.filewriter;
import java.io.FileWriter;
/**
* Java write file using FileWriter write(char[] cbuf) method
*
* @author pankaj
*
*/
public class FileWriterWriteCharArrayExample {
public static void main(String[] args) {
char[] data = "This is FileWriter Example.".toCharArray();
try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
// 繼承自 java.io.Writer
fileWriter.write(data);
} catch (Exception e) {
e.printStackTrace();
}
}
}
write(String str)
此方法會將字串值寫入指定的檔案,由 str
指定。
package com.journaldev.io.filewriter;
import java.io.FileWriter;
/**
* Java write file using FileWriter write(String str) method
*
* @author pankaj
*
*/
public class FileWriterWriteString {
public static void main(String[] args) {
try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
// 繼承自 java.io.Writer
fileWriter.write("JournalDev");
} catch (Exception e) {
e.printStackTrace();
}
}
}
append(char c)
此方法將指定的字符附加到此寫入器,其中c
是要附加的16位字符。
package com.journaldev.io.filewriter;
import java.io.FileWriter;
/**
* Java write file using FileWriter append(char c) method
*
* @author pankaj
*
*/
public class FileWriterAppendCharacter {
public static void main(String[] args) {
try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
// 從 java.io.Writer 繼承的方法
fileWriter.write("JournalDev");
fileWriter.append('C');
} catch (Exception e) {
e.printStackTrace();
}
}
}
flush()
此方法刷新流。當調用 flush()
方法時,它立即將數據寫入輸出文件。
package com.journaldev.io.filewriter;
import java.io.FileWriter;
/**
* Java write file with FileWriter flush() method
*
* @author pankaj
*
*/
public class FileWriterFlushExample {
public static void main(String[] args) {
try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
// 從 java.io.Writer 繼承的方法
fileWriter.write("JournalDev");
// 從 java.io.OutputStreamWriter 繼承的方法
fileWriter.flush();
fileWriter.write(" Tutorials");
fileWriter.flush();
} catch (Exception e) {
e.printStackTrace();
}
}
}
close()
此方法在關閉流之前刷新流。一旦流被關閉,調用 write()
或 flush()
方法將引發 IOException
。對已經關閉的流進行關閉操作不起作用。
package com.journaldev.io.filewriter;
import java.io.FileWriter;
/**
* Java write file with FileWriter close() method
*
* @author pankaj
*
*/
public class FileWriterCloseExample {
public static void main(String[] args) {
try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
// 從 java.io.Writer 繼承的方法
fileWriter.write("JournalDev");
// 從 java.io.OutputStreamWriter 繼承的方法
fileWriter.close();;
fileWriter.write(" Tutorials");
} catch (Exception e) {
e.printStackTrace();
}
}
}
輸出:
java.io.IOException: Stream closed
at sun.nio.cs.StreamEncoder.ensureOpen(Unknown Source)
at sun.nio.cs.StreamEncoder.write(Unknown Source)
at sun.nio.cs.StreamEncoder.write(Unknown Source)
at java.io.OutputStreamWriter.write(Unknown Source)
at java.io.Writer.write(Unknown Source)
at com.journaldev.examples.FileWriterCloseExample.main(FileWriterCloseExample.java:20)
FileWriter vs FileOutputStream
- FileWriter 用于写入字符流,而 FileOutputStream 用于写入原始字节流。
- FileWriter 处理 16 位字符,而 FileOutputStream 处理 8 位字节。
- FileWriter 可处理 Unicode 字符串,而 FileOutputStream 向文件写入字节,不接受字符或字符串,因此需要由
OutputStreamWriter
包装以接受字符串。
还可以查看 java write file 了解有关在 Java 中如何写文件的更多信息。关于 Java FileWriter,希望没有漏掉重要内容。
您可以从我们的 GitHub 存储库 下载所有示例代码。
参考:API 文档
Source:
https://www.digitalocean.com/community/tutorials/java-filewriter-example