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
的一部分从 int off
到 int 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中写文件,还可以查看java write file。这就是关于Java FileWriter的全部内容,希望没有漏掉重要内容。
您可以从我们的GitHub存储库下载所有示例代码。
参考:API文档
Source:
https://www.digitalocean.com/community/tutorials/java-filewriter-example