Java FileWriter示例
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软件包起来以接受字符串。

