转自:http://hi.baidu.com/shmily_sky/blog/item/616e9e3dfdc5bd05baa167a3.html
最近一直在研究这方面的问题,在java写文件中,通常会使用FileOutputStream和 FileWriter,FileWriter只能写文本文件。 FileOutputStream也经常结合BufferedOutputStream。因为实际应用中写文本文件的情况占了大多数。所以下面测试用不同 的方式生成一个相同行数、大小相同的文件的三种不同方式。
import java.io.File;
import java.io.FileOutputStream;
import java.io.*;
public class FileTest {
public FileTest() {
}
public static void main(String[] args) {
FileOutputStream out = null;
FileOutputStream outSTr = null;
BufferedOutputStream Buff=null;
FileWriter fw = null;
int count=1000;//写文件行数
try {
out = new FileOutputStream(new File("C:/add.txt"));
long begin = System.currentTimeMillis();
for (int i = 0; i < count; i++) {
out.write("测试java 文件操作\r\n".getBytes());
}
out.close();
long end = System.currentTimeMillis();
System.out.println("FileOutputStream执行耗时:" + (end - begin) + " 豪秒");
outSTr = new FileOutputStream(new File("C:/add0.txt"));
Buff=new BufferedOutputStream(outSTr);
long begin0 = System.currentTimeMillis();
for (int i = 0; i < count; i++) {
Buff.write("测试java 文件操作\r\n".getBytes());
}
Buff.flush();
Buff.close();
long end0 = System.currentTimeMillis();
System.out.println("BufferedOutputStream执行耗时:" + (end0 - begin0) + " 豪秒");
fw = new FileWriter("C:/add2.txt");
long begin3 = System.currentTimeMillis();
for (int i = 0; i < count; i++) {
fw.write("测试java 文件操作\r\n");
}
fw.close();
long end3 = System.currentTimeMillis();
System.out.println("FileWriter执行耗时:" + (end3 - begin3) + " 豪秒");
} catch (Exception e) {
e.printStackTrace();
}
finally {
try {
fw.close();
Buff.close();
outSTr.close();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
以下结果经过多次执行,取常出现的数据,由于只是简单比较,不做详细统计。
1.当count=1000的,即写文件1000行的时候,写出的文件大小为18.5KB:
FileOutputStream执行耗时:46 豪秒
BufferedOutputStream执行耗时:31 豪秒
FileWriter执行耗时:15 豪秒
2.当count=10000的,即写文件10000行的时候,写出的文件大小为185KB:
FileOutputStream执行耗时:188 豪秒
BufferedOutputStream执行耗时:32 豪秒
FileWriter执行耗时:16 豪秒
3.当count=100000的,即写文件100000行的时候,写出的文件大小为1856KB:
FileOutputStream执行耗时:1266 豪秒
BufferedOutputStream执行耗时:125 豪秒
FileWriter执行耗时:93 豪秒
4.当count=1000000的,即写文件1000000行的时候,写出的文件大小为 18555KB:
FileOutputStream执行耗时:12063 豪秒
BufferedOutputStream执行耗时:1484 豪秒
FileWriter执行耗时:969 豪秒
由以上数据可以看到,如果不用缓冲流BufferedOutputStream,FileOutputStream写文件的鲁棒性是很不好的。当写 1000000行的文件的时候,FileOutputStream比FileWriter要慢11094毫秒(11秒), BufferedOutputStream比FileWriter慢515毫秒。
不要小看这几秒的时间。当操作的数据量很大的时候,这点性能的差距就会很大了。在通用数据迁移工具导出数据库2千万条记录生成sql脚本文件的时候,性能性能相差10分钟以上。
分享到:
相关推荐
使用Java的FileReader和BufferedReader类读取Text文件内容。以下是一个简单的示例: ```java import java.io.*; public class TextReader { public static String readFile(String filePath) throws IOException ...
对于大文件,使用缓冲流可以提高性能,避免一次性加载整个文件导致内存溢出。 此外,Java 7引入了try-with-resources语句,它可以自动关闭在try块中打开的资源,防止资源泄漏,如上面代码所示。这使得文件操作更加...
在Java开发中,文件批量上传是一项常见的功能,尤其在企业级应用中,用户可能需要上传大量数据或文件。本教程将介绍如何利用SWF(Simple Workflow)和EXT库来实现这一功能。SWF是一个用于创建富互联网应用程序的前端...
本示例将详细介绍如何使用Java编程语言将一个简单的TXT文本文件转换为PDF格式的文件。这涉及到利用特定库来处理这两种不同格式的文件,以便在各种环境中保持文件的可读性和一致性。 首先,我们需要了解TXT和PDF两种...
在读取HTML文件时,我们通常会选择`BufferedReader`,因为它能高效地处理字符流并提供缓冲区以提高性能。 1. **使用BufferedReader读取HTML文件** - 创建一个`FileReader`对象,传入HTML文件的路径作为参数。 - ...
Java语言在处理XML文件时,通常会利用第三方库如JDOM、DOM4J或Java内置的SAX和DOM解析器。本示例中,我们关注的是JDOM库,它为XML文档提供了简单而直接的API,使得读写XML文件变得更加方便。下面我们将详细探讨如何...
这个“TextRank, TextRank算法提取关键词的Java实现.zip”压缩包文件包含了一个开源项目,名为“TextRank-master”,它提供了一种Java实现来提取文本中的关键词。 TextRank算法的核心思想是模拟PageRank在文本处理...
当我们谈论“TEXT文件导入”时,通常是指将纯文本文件(.txt格式)的内容读取到程序或系统中进行处理。本程序针对的就是这种需求,提供了一个高效、可靠的TEXT文件导入解决方案。以下是关于TEXT文件导入的一些关键...
在Java编程语言中,文件加密是一项重要的安全技术,主要用于保护数据免受未经授权的访问或篡改。本案例探讨了如何使用Java实现文件的加密,它属于Java开发中的十大经典应用场景之一。下面,我们将深入讲解这一过程,...
在IT领域,转换数据格式是常见的任务之一,例如将Excel文件转换为Text文件。这个过程涉及到数据处理、文件格式的理解以及可能的编程技术。在给定的标题“Excel文件转成Text文件”和描述“支持sql语句查询excel文件,...
在Java编程环境中,调用Windows操作系统来实现文本转语音(Text-to-Speech, TTS)并生成播放文件是一项常见的需求。这项技术可以帮助开发者为应用程序添加语音合成功能,尤其适用于无障碍应用、语音助手或者多媒体...
ParallelGit 是为 Git 应用准备的高性能 Java NIO 内存文件系统。ParallelGit 是基于 JGit 构建的, 可以帮助 Java 项目快速的访问 Git 文件。ParallelGit 可以帮助你操作本地 Git仓库,允许你通过 Java 7 nio 文件...
在Java开发中实现文件下载功能是一项常见需求,尤其是在Web应用中。文件下载功能涉及到客户端与服务器端之间的交互,服务器需要将文件内容发送给客户端浏览器,然后由浏览器负责保存或打开该文件。Java Web开发中...
在Java编程语言中,HTTP(超文本传输协议)被广泛用于客户端与服务器之间的通信,包括文件上传功能。本文将深入探讨如何使用Java实现HTTP文件上传,同时基于提供的压缩包资源,我们将详细介绍相关代码和类库。 首先...
本篇文章将深入探讨Java和Android中的布局文件及其重要性。 一、Android布局文件概述 Android布局文件是用来描述应用程序界面上组件(如按钮、文本视图、图像视图等)的结构和位置的XML文档。这些文件定义了控件的...
在Java编程环境中生成PDF文件是一项常见的任务,尤其在企业级应用中,如报表生成、文档输出等场景。PDF(Portable Document Format)是一种跨平台的文件格式,能够保持文档的原始排版和样式,使得文件在不同设备间...
在Java编程语言中,读写文本文件是常见的操作,这对于数据存储、日志记录或配置文件处理至关重要。这个"基于Java的实例源码-读写文本文件的示例代码.zip"压缩包很可能是包含了几个演示如何在Java中执行这些操作的源...
根据给定的文件标题、描述、标签以及部分内容,我们可以从中提炼出有关Java文件上传功能的知识点。以下是对这些知识点的详细解析: ### Java文件上传基础知识 #### 1. 使用Multipart请求处理文件上传 在Java Web...
在Java编程中,导出txt文件是常见的数据输出任务,特别是在需要将程序处理的数据以文本格式存储或分享时。以下将详细介绍两种Java导出txt文件的方法,并提供相关的使用技巧。 方法一: 在这个示例中,代码创建了一...
3. **性能考量**:对于大文件,使用`StringBuilder`代替`StringBuffer`在单线程环境中可以提高性能。 4. **编码问题**:默认情况下,`FileReader`使用系统默认编码,这可能在处理非ASCII字符时导致乱码。应明确指定...