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