Java FileWriter 教程:文件写入与操作详解

Java的FileWriter

  • Java FileWriter 类是 `java.io` 包的一部分。
  • FileWriter 是 `java.io.OutputStreamWriter` 类的子类。
  • FileWriter 用于写入字符流。
  • FileWriter 用于向字符文件写入数据。其 `write()` 方法允许您将一个或多个字符或字符串写入文件。
  • FileWriter 通常会被更高级别的 Writer 对象(如 BufferedWriter 或 PrintWriter)包装,这些对象提供了更好的性能和更高级、更灵活的数据写入方法。
Java FileWriter

FileWriter 构造函数

  1. `FileWriter(File file)`: 使用指定的 `File` 对象创建一个 `FileWriter` 对象。如果文件存在但它是一个目录而不是一个普通文件,或者文件不存在但无法创建,或者无法以任何其他原因打开文件,则抛出一个 `IOException`。
  2. `FileWriter(File file, boolean append)`: 使用指定的 `File` 对象创建一个 `FileWriter` 对象。如果第二个参数为 `true`,则会将字节写入文件的末尾而不是开头。如果文件存在但它是一个目录而不是一个普通文件,或者文件不存在但无法创建,或者无法以任何其他原因打开文件,则抛出一个 `IOException`。
  3. `FileWriter(FileDescriptor fd)`: 创建一个与指定文件描述符关联的 `FileWriter` 对象。
  4. `FileWriter(String fileName)`: 使用指定的文件名创建一个 `FileWriter` 对象。如果文件存在但它是一个目录而不是一个普通文件,或者文件不存在但无法创建,或者无法以任何其他原因打开文件,则抛出一个 `IOException`。
  5. `FileWriter(String fileName, boolean append)`: 使用指定的文件名创建一个 `FileWriter` 对象,并使用一个布尔值指示是否追加写入的数据。如果第二个参数为 `true`,则数据将被写入文件的末尾而不是开头。如果文件存在但它是一个目录而不是一个普通文件,或者文件不存在但无法创建,或者无法以任何其他原因打开文件,则抛出一个 `IOException`。

Java FileWriter 示例

Java FileWriter 示例展示了如何使用 FileWriter 类进行文件写入。

FileWriter 继承了 `java.io.OutputStreamWriter` 和 `java.io.Writer` 类的方法。我们来看一下下面的一些方法和示例。

写入 `int c`

这个方法写入一个由整数 `c` 指定的单个字符。

package com.Olivia.io.filewriter;

import java.io.FileWriter;
import java.io.IOException;

/**
 * Java 使用 FileWriter 的 write 方法写入文件
 *
 * @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();
			}
		}
	}
}
Java FileWriter 示例
package com.Olivia.io.filewriter;

import java.io.FileWriter;

/**
 * Java 使用 try-with-resources 语句通过 FileWriter 的 write 方法写入文件
 *
 * @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’ 的十进制 ASCII 值,所以整数 65 会被转换成字符 ‘A’,其他字符同理。

写入 `String str, int off, int len`

这种方法从字符串 `str` 的 `off` 偏移量开始,将长度为 `len` 的一部分字符写入文件。

  • `str`: 要写入的字符串
  • `off`: 开始读取字符的偏移量
  • `len`: 要写入的字符数量

如果 `len` 参数的值为负数,则不会写入任何字符。

package com.Olivia.io.filewriter;

import java.io.FileWriter;

/**
 * Java 使用 FileWriter 的 write(String s, int off, int len) 方法写入文件
 *
 * @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();
		}
	}
}
FileWriter 写入示例

将字符数组 `cbuf` 从 `off` 位置开始的长度为 `len` 的部分写入。

该方法将字符数组 `char[] cbuf` 中从 `off` 位置开始,长度为 `len` 的一部分写入。

  • cbuf: 一个字符数组
  • off: 开始读取字符的偏移量
  • len: 要写入的字符数量
package com.Olivia.io.filewriter;

import java.io.FileWriter;

/**
 * 使用 FileWriter 的 write(char[] cbuf, int off, int len) 方法在 Java 中写入文件
 *
 * @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();
		}
	}
}

写入字符数组 cbuf

此方法将由 cbuf 指定的字符数组写入文件。

package com.Olivia.io.filewriter;

import java.io.FileWriter;

/**
 * 使用 FileWriter 的 write(char[] cbuf) 方法在 Java 中写入文件
 *
 * @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();
		}
	}
}

写入字符串 str

此方法将一个字符串值写入由 str 指定的文件中。

package com.Olivia.io.filewriter;

import java.io.FileWriter;

/**
 * 使用 FileWriter 的 write(String str) 方法在 Java 中写入文件
 *
 * @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();
		}
	}
}

追加字符 c

将指定字符追加到此写入器中,其中 c 是要追加的 16 位字符。

package com.Olivia.io.filewriter;

import java.io.FileWriter;

/**
 * 使用 FileWriter 的 append(char c) 方法在 Java 中写入文件
 *
 * @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.Olivia.io.filewriter;

import java.io.FileWriter;

/**
 * 使用 FileWriter 的 flush() 方法在 Java 中写入文件
 *
 * @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.Olivia.io.filewriter;

import java.io.FileWriter;

/**
 * 使用 FileWriter 的 close() 方法在 Java 中写入文件
 *
 * @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.Olivia.examples.FileWriterCloseExample.main(FileWriterCloseExample.java:20)

FileWriterFileOutputStream 的比较

  • FileWriter 用于写入字符流,而 FileOutputStream 用于写入原始字节流。
  • FileWriter 处理 16 位字符,而 FileOutputStream 处理 8 位字节。
  • FileWriter 可以处理 Unicode 字符串,而 FileOutputStream 将字节写入文件,不接受字符或字符串,因此需要通过 OutputStreamWriter 进行包装才能接受字符串。

您还可以查阅 Java 写入文件 的相关内容,了解如何在 Java 中写入文件。以上就是关于 Java FileWriter 的全部内容,希望没有遗漏任何重要信息。

您可以从我们的 GitHub 仓库下载所有示例代码。

参考: API 文档

bannerAds