Java FileWriter示例

时间:2020-02-23 14:36:34  来源:igfitidea点击:

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.theitroad.io.filewriter;

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

/**
 * Java write file using FileWriter write method
 * 
 * @author hyman
 *
 */
public class FileWriterWriteIntExample {

	public static void main(String[] args) {
		FileWriter fileWriter = null;
		try {
			fileWriter = new FileWriter("D:/data/file.txt");
			//inherited method from 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类时我们可以尝试使用资源。

package com.theitroad.io.filewriter;

import java.io.FileWriter;

/**
 * Java write file using FileWriter write method using try with resource
 * 
 * @author hyman
 *
 */
public class FileWriterWriteIntTryWithResource {

	public static void main(String[] args) {
		try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
			//inherited method from 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.theitroad.io.filewriter;

import java.io.FileWriter;

/**
 * Java write file using FileWriter write(String  s,  int  off,  int  len) method
 * 
 * @author hyman
 *
 */
public class FileWriterWriteStringExample {

	public static void main(String[] args) {
		String data = "This is FileWriter Example.";
		try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
			//inherited method from java.io.OutputStreamWriter 
			fileWriter.write(data, 8, 10);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

write(char [] cbuf,int off,int len)

该方法将由char [] cbuf指定的字符数组的一部分从in的off写入in的len。

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

import java.io.FileWriter;

/**
 * Java write file using FileWriter write(char[] cbuf,  int  off,  int  len) method
 * 
 * @author hyman
 *
 */
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")) {
			//inherited method from java.io.OutputStreamWriter 
			fileWriter.write(data, 8, 10);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

write(char [] cbuf)

此方法写入cbuf指定的字符数组。

package com.theitroad.io.filewriter;

import java.io.FileWriter;

/**
 * Java write file using FileWriter write(char[] cbuf) method
 * 
 * @author hyman
 *
 */
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")) {
			//inherited method from java.io.Writer 
			fileWriter.write(data);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

write(String str)

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

package com.theitroad.io.filewriter;

import java.io.FileWriter;

/**
 * Java write file using FileWriter write(String  str) method
 * 
 * @author hyman
 *
 */
public class FileWriterWriteString {

	public static void main(String[] args) {
		try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
			//inherited method from java.io.Writer 
			fileWriter.write("theitroad");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

append(char c)

此方法将指定字符附加到此编写器,其中c是要附加的16位字符。

package com.theitroad.io.filewriter;

import java.io.FileWriter;

/**
 * Java write file using FileWriter append(char c) method
 * 
 * @author hyman
 *
 */
public class FileWriterAppendCharacter {

	public static void main(String[] args) {
		try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
			//inherited method from java.io.Writer 
			fileWriter.write("theitroad");
			fileWriter.append('C');
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

flush()

此方法刷新流。
当调用flush()方法时,它将立即将数据写入输出文件。

package com.theitroad.io.filewriter;

import java.io.FileWriter;

/**
 * Java write file with FileWriter flush() method
 * 
 * @author hyman
 *
 */
public class FileWriterFlushExample {

	public static void main(String[] args) {
		try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
			//inherited method from java.io.Writer 
			fileWriter.write("theitroad");
			//inherited method from java.io.OutputStreamWriter
			fileWriter.flush();
			
			fileWriter.write(" Tutorials");
			fileWriter.flush();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

close()

此方法在关闭流之前先对其进行冲洗。
一旦关闭流,调用write()或者flush()方法将导致抛出IOException。
关闭先前关闭的流无效。

package com.theitroad.io.filewriter;

import java.io.FileWriter;

/**
 * Java write file with FileWriter close() method
 * 
 * @author hyman
 *
 */
public class FileWriterCloseExample {

	public static void main(String[] args) {
		try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
			//inherited method from java.io.Writer 
			fileWriter.write("theitroad");
			//inherited method from 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.theitroad.examples.FileWriterCloseExample.main(FileWriterCloseExample.java:20)

FileWriter与FileOutputStream

  • FileWriter用于写入字符流,而FileOutputStream用于写入原始字节流。

  • FileWriter处理16位字符,而FileOutputStream处理8位字节。

  • FileWriter可以处理Unicode字符串,而FileOutputStream将字节写入文件,并且不接受字符或者字符串,因此需要由OutputStreamWriter软件包起来以接受字符串。