黑马程序员技术交流社区
标题:
文件读写最有效率的方法
[打印本页]
作者:
萌小子
时间:
2013-5-11 01:06
标题:
文件读写最有效率的方法
本帖最后由 王盟盟 于 2013-5-14 12:10 编辑
关于文件读写,最有效率的方法是什么?利用怎样的缓存技术能够提高大文件的读写速度?我只会用一些简单的缓存技术,比如下面这些怎么优化会更好?
import java.io.*;
import javax.swing.ProgressMonitorInputStream;
public class FileTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
file1 f=new file1();
}
}
class file1
{
File a=new File("d:\\a.txt");
File b=new File("d:\\b.txt");
public file1()
{
//调用字节流函数
fileStream();
//调用字符流函数
// fileRandW();
//调用缓冲字符流函数
//fileBuffered();
}
//利用fileInputStream,file outputStream字节流
private void fileStream()
{
FileInputStream fis=null;
FileOutputStream fos=null;
try {
fis=new FileInputStream(a);
fos=new FileOutputStream(b);
ProgressMonitorInputStream pp=new ProgressMonitorInputStream(null,"Reading"+a.getName(),fis);
byte bytes[]=new byte[1024];
int n=0;
if(a.exists())
{
while((n=fis.read(bytes))!=-1)
{
if(b.exists())
{
fos.write(bytes);
}
else
{
b.createNewFile();
fos.write(bytes);
}
}
}else
{
System.out.println("文件不存在");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
try {
fis.close();
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//利用fileReader,fileWriter字符流
private void fileRandW()
{
FileReader fr=null;
FileWriter fw=null;
try {
fr=new FileReader(a);
fw=new FileWriter(b);
char []chars=new char[1024];
int n=0;
if(a.exists())
{
while((n=fr.read(chars))!=-1)
{
if(b.exists())
{
fw.write(chars);
}else
{
b.createNewFile();
fw.write(chars);
}
}
}
else
{
System.out.println("文件不存在");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
try {
fr.close();
fw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//利用BufferedReader,BufferedWriter 缓冲字符流
private void fileBuffered()
{
FileReader fr=null;
FileWriter fw=null;
BufferedReader br=null;
BufferedWriter bw=null;
try {
fr=new FileReader(a);
fw=new FileWriter(b);
br=new BufferedReader(fr);
bw=new BufferedWriter(fw);
int n=0;
int times=0;
String s="";
if(a.exists())
{
while((s=br.readLine())!=null)
{
System.out.println(s);
if(b.exists())
{
bw.write(s+"\r\n");
}else
{
b.createNewFile();
bw.write(s+"\r\n");
}
times++;
}
System.out.println(times);
}else
{
System.out.println("文件不存在");
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally
{
try {
br.close();
bw.close();
fr.close();
fw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
作者:
壹旪傾峸
时间:
2013-5-11 01:37
顶不住了 看java视频看到现在累了 先占一楼 明个再好好看看吧
作者:
Miss小强
时间:
2013-5-11 08:31
如果要同时读取呢,有一个类可以完成,建议你去看api文档:
RandomAccessFile
作者:
萌小子
时间:
2013-5-11 11:13
Miss小强 发表于 2013-5-11 08:31
如果要同时读取呢,有一个类可以完成,建议你去看api文档:
RandomAccessFile ...
这个类不是随机存取文件么,好像不能提高缓存效率吧?比如双缓存是怎么回事啊?
作者:
Miss小强
时间:
2013-5-11 11:38
如果是字符的话,将字符数组换成一个StringBuilder容器;
如果是字节的话将byte数组的长度定义为 available函数的返回值。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2