Java FileWriter 示例

Java FileWriter

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

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):使用指定的fileName创建FileWriter对象。如果命名文件存在但是目录而不是常规文件,或者文件不存在但无法创建,或由于其他原因无法打开,它会抛出IOException
  5. FileWriter(String fileName, boolean append):使用指定的fileName创建FileWriter对象,其中布尔值指示是否追加写入的数据。如果第二个参数为true,则数据将被写入文件的末尾而不是开头。如果命名文件存在但是目录而不是常规文件,或者文件不存在但无法创建,或由于其他原因无法打开,它会抛出IOException。

Java FileWriter示例

FileWriter 继承了 java.io.OutputStreamWriterjava.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