站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题java如何读取大文件

java如何读取大文件

摘要: java如何读取大文件


现在做一个程序 需要对cvs格式的txt文件 操作 读取其中的数据 处理后再写入另一个文件
当测试文件为20K左右时 程序运行正常 可是如果测试数据很多 现在用的 是6m的一个txt文件 原来的程序就出现问题 读取出来的数据都是乱码 请教如何处理



乱码跟文件大小有什么关系?


楼主把CVS的内容都用一个有效的记录填充,如果在几十K之内没问题,看看在几十M的时候有没有问题。如果真有数量限制,也可以测出来究竟临界值是多大。然后再说其余的。


如果没有多线程的话,不应该乱码吧,不知道,帮顶


谁能帮忙写个用缓存 分次读取 数据 然后分析 操作后 在读取下一部分的程序


看不懂了


分次读取,一次读多少,处理完成后再继续读。

应该会有搂主说的问题,我原来的同事好像碰到过。


6MB太小了...100来兆都不大,你就读吧...


你可以一部分一部分读,没有必要全部一次性读入内存


用 stream 一部分一部分的读。


肯定有问题的 下边是文件的内容 他是一个cvs的txt文件 要读取数据进行处理 按行读取 用stream 怎么才能分割的正好的呢 搞不定 那位帮忙 谢谢

1/10/2006 00:04:0986-29-8898620386-29-88986203陕西西安86-29-81944866陕西西安Outgoing MessageCTC(PHS)35Call was answered
01/10/2006 00:04:5086-29-8898620386-29-81944866陕西西安86-29-88986203陕西西安ReplyCTC(PHS)17Call was answered
01/10/2006 00:16:0286-29-8126573286-29-81265732陕西西安86-29-83079593陕西西安Outgoing MessageCTC(PHS)24Call was answered
01/10/2006 00:18:1886-29-8126573286-29-81265732陕西西安86-29-81068734陕西西安Outgoing MessageCTC(PHS)33Call was answered


1/10/2006 00:04:0986-29-8898620386-29-88986203陕西西安86-29-81944866陕西西安Outgoing MessageCTC(PHS)35Call was answered

这个是完整的一样 数据用tab分割的


用BufferedReader,按字符读!
不要用Stream,InputStream是按字节读的,所以有乱码了


File file = new File("1.txt");
BufferedReader in = new BufferedReader(new InputStreamReader(
new FileInputStream(file)));
String line = in.readLine();

我这么读的


试试这个:
BufferedReader in=new BufferedReader(new FileReader("1.txt"));


我认为应该根据换行的标记(lz好像用的是TAB)来确定每一行的内容,读出来,处理,然后下一行这样速度不会损失,也会占用最小的内存,我的想法大概是
final int BUFFER_SIZE = 256;
final String ENCODING = "UTF-8";
InputStream is = getClass().getResourceAsStream("cvs.txt");
byte b = -1;
byte newLine = '/t';
byte[] buffer = new byte[BUFFER_SIZE];
String content = null;
int counter = 0;
try {
while ((b = (byte) is.read()) != -1) {
if (b != newLine) {
buffer[counter++] = b;
}else{
//已经到了此行的结尾,可以对buffer中的数据进行处理了
content = new String(buffer,0,counter,ENCODING);
//然后处理
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


6m 真的不算大.

如果txt规定了具体格式的话(如 一行一条记录之类的)建议用BufferedReader读

不然,二进制的只能用InputStream读了.

另外,乱码的话,感觉是你一次文件独得不完全,造成解码失败.


6M很小的。用BUFFER吧。然后你乱码可能分割什么的问题


------ 以下是签名 ------
SoftDN.com, 提供免费的项目管理平台:SVN仓库、需求管理、BUG跟踪、任务管理、在线论坛、网站空间、项目存储及完整的备份等。欢迎网友光临建立项目,开创自己的梦想。
地址:http://www.softdn.com http://www.softdn.cn


用nio吧


新的问题
文件是unicode 格式的 这个就是引起乱码的原因 请问如果读取才可以正确显示汉字呢 还有读取后 处理后 也写入一个unicode 中
请大家指导下 谢谢


↑返回目录
前一篇: 求!!定时执行某个方法的类
后一篇: 如何读取unicode格式中文文件,处理后再写入一个unicode文件