Java写文件的方式:FileOutputStream vs. FileWriter
来源:互联网 发布:离散傅里叶矩阵 编辑:程序博客网 时间:2024/05/01 20:27
一般用Java写文件常用的两种方式就是FileOutputStream 和FileWriter。
使用FileOutputStream:
File fout = new File(file_location_string);FileOutputStream fos = new FileOutputStream(fout);BufferedWriter out = new BufferedWriter(new OutputStreamWriter(fos));out.write("something");
使用FileWriter:
FileWriter fstream = new FileWriter(file_location_string);BufferedWriter out = new BufferedWriter(fstream);out.write("something");
Java API给出的解释是:FileOutputStream是用来输出原始字节流的,如图像数据。要输出字符流,则使用FileWriter。
下面从两者的实现上面来分析,先看2段代码:
1,
FileWriter fw=new FileWriter("c:\test.txt");
fw.write("abcdefgh");
2,
FileOutputStream fos=new FileOutputStream("c:\test.txt");
fos.write("abcdefgh".getBytes());
两段代码都能创建test.txt的文件,但第一段代码创建的文件内容为空,第二段代码中有内容写入。
因为FileWriter继承自OutputStreamWriter,调用FileWriter的方法就是调用OutputStreamWriter的write方法,而在OutputStreamWriter中有一个StreamEncoder对象,调用OutputStreamWriter的write方法,其实就是调用的StreamEncoder的write方法。在StreamEncoder中有一个字节缓冲区,会先把准备写入目的的字符先转变为字节,等缓冲区满了或者流被刷新后,流中的数据就写到目的中去。所以,第一段代码由于没有刷新流,所以实际上是写到了StreamEncoder的字节缓冲区中去了;所以文件中没有内容!
FileOutputStream直接继承自OutputStream,调用FileOutputStream的write方法的时候,实际上就在调用底层的写方法,把数据直接写到文件中去了,没有缓存。
如果要在已有文件后面加内容而不覆盖已有内容,在new FileWriter时多传递一个true参数。如new FileWriter(file, true);
下面是一个FileWriter的example:
import java.io.BufferedWriter;import java.io.File;import java.io.FileWriter;import java.io.IOException; public class Main {public static void main(String[] args) throws IOException {File dir = new File(".");String loc = dir.getCanonicalPath() + File.separator + "Code.txt"; FileWriter fstream = new FileWriter(loc, true);BufferedWriter out = new BufferedWriter(fstream); out.write("something");out.newLine(); //close buffer writerout.close();}}
FileOutputStream的example:
import java.io.File;import java.io.FileOutputStream;import java.io.IOException;public class WriteFileExample { public static void main(String[] args) { File file = new File("/Users/heilang/MySpace/newfile1.txt"); String content = "This is the text content"; try (FileOutputStream fop = new FileOutputStream(file)) { // if file doesn't exists, then create it if (!file.exists()) { file.createNewFile(); } // get the content in bytes byte[] contentInBytes = content.getBytes(); fop.write(contentInBytes); fop.flush(); fop.close(); System.out.println("Done"); } catch (IOException e) { e.printStackTrace(); } }}上面FileOutputStream是直接写的字节流,也可以用OutputStreamWriter将字节流转换成字符流,下面是example:
import java.io.BufferedWriter;import java.io.File;import java.io.IOException;import java.io.FileOutputStream;import java.io.OutputStreamWriter;public class Main { public static void main(String[] args) throws IOException { File dir = new File("."); String loc = dir.getCanonicalPath() + File.separator + "Code.txt"; File fout = new File(loc); FileOutputStream fos = new FileOutputStream(fout); BufferedWriter out = new BufferedWriter(new OutputStreamWriter(fos)); out.write("something else"); out.newLine(); out.write("new line"); //close buffer writer out.close(); }}
0 0
- Java写文件的方式:FileOutputStream vs. FileWriter
- JAVA和Scala写文件类FileWriter/FileOutputStream/BufferedWriter
- java中FileOutputStream()和FileWriter()的不同
- Java:FileOutputStream与FileWriter的区别
- Java 写文件:FileOutputStream
- JAVA写文件:FileOutputStream
- Java 写文件:FileOutputStream
- Java 写文件:FileOutputStream
- java API 写文本文件比较 FileOutputStream, BufferedOutputStream, FileWriter
- 转:java API 写文本文件比较 FileOutputStream, BufferedOutputStream, FileWriter
- java API 写文本文件比较 FileOutputStream, BufferedOutputStream, FileWriter
- java 利用FileOutputStream写文件(两种方式)
- FileOutputStream、BufferedOutputStream、FileWriter三种文件写入的对比
- 复制文件跟FileReader\FileWriter 和FileInputStream\FileOutputStream的区别
- java中FileOutputStream()和FileWriter()的不同 (转)
- FileOutputStream和FileWriter的抉择
- FileOutputStream与FileWriter的区别
- Java FileReader FileWriter 写读文件 代码
- GridView 设置其高度属性为 wrap_content
- 八大种必知排序算法(二) 选择排序,插入排序,希尔算法
- Windows Event Trace 编程(TDH.lib)
- 和为S的连续正数序列
- Android调试中遇到的bug
- Java写文件的方式:FileOutputStream vs. FileWriter
- mysql查询今天、昨天、7天、近30天、本月、上一月 数据
- C++类内存分布
- 最好的epoll讲解
- JOS 系统中第一个用户进程的建立和运行
- 结果集(ResultSet)用法
- oracle 的 BLOCK CHANGE TRACKING
- EJS 模板快速入门
- CCF 窗口