社区
Java SE
帖子详情
java如何读取大文件
hcqhappy
2006-11-07 04:32:20
现在做一个程序 需要对cvs格式的txt文件 操作 读取其中的数据 处理后再写入另一个文件
当测试文件为20K左右时 程序运行正常 可是如果测试数据很多 现在用的 是6m的一个txt文件 原来的程序就出现问题 读取出来的数据都是乱码 请教如何处理
...全文
828
21
打赏
收藏
java如何读取大文件
现在做一个程序 需要对cvs格式的txt文件 操作 读取其中的数据 处理后再写入另一个文件 当测试文件为20K左右时 程序运行正常 可是如果测试数据很多 现在用的 是6m的一个txt文件 原来的程序就出现问题 读取出来的数据都是乱码 请教如何处理
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
andlyLiu2013
2010-06-11
打赏
举报
回复
我的是20M 的没搞出了,结果就…… 很严重……
我那个是比较ip txt中是ip段
牛一样的程序员
2010-05-29
打赏
举报
回复
6M是不大,你们最大读的是多大,上百M的话,读起来很慢,有没有好的办法。有什么来读比较好,还有可能是上G的文件怎么读
hcqhappy
2006-11-12
打赏
举报
回复
新的问题
文件是unicode 格式的 这个就是引起乱码的原因 请问如果读取才可以正确显示汉字呢 还有读取后 处理后 也写入一个unicode 中
请大家指导下 谢谢
JAVA_WEB
2006-11-09
打赏
举报
回复
用nio吧
softdn2
2006-11-09
打赏
举报
回复
6M很小的。用BUFFER吧。然后你乱码可能分割什么的问题
------ 以下是签名 ------
SoftDN.com, 提供免费的项目管理平台:SVN仓库、需求管理、BUG跟踪、任务管理、在线论坛、网站空间、项目存储及完整的备份等。欢迎网友光临建立项目,开创自己的梦想。
地址:http://www.softdn.com http://www.softdn.cn
d5aaron
2006-11-09
打赏
举报
回复
6m 真的不算大.
如果txt规定了具体格式的话(如 一行一条记录之类的)建议用BufferedReader读
不然,二进制的只能用InputStream读了.
另外,乱码的话,感觉是你一次文件独得不完全,造成解码失败.
angelleecash
2006-11-09
打赏
举报
回复
我认为应该根据换行的标记(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();
}
hbwhwang
2006-11-09
打赏
举报
回复
试试这个:
BufferedReader in=new BufferedReader(new FileReader("1.txt"));
hcqhappy
2006-11-09
打赏
举报
回复
File file = new File("1.txt");
BufferedReader in = new BufferedReader(new InputStreamReader(
new FileInputStream(file)));
String line = in.readLine();
我这么读的
hbwhwang
2006-11-09
打赏
举报
回复
用BufferedReader,按字符读!
不要用Stream,InputStream是按字节读的,所以有乱码了
千里冰封820
2006-11-08
打赏
举报
回复
你可以一部分一部分读,没有必要全部一次性读入内存
hcqhappy
2006-11-08
打赏
举报
回复
1/10/2006 00:04:09 86-29-88986203 86-29-88986203 陕西 西安 86-29-81944866 陕西 西安 Outgoing Message CTC(PHS) 35 Call was answered
这个是完整的一样 数据用tab分割的
hcqhappy
2006-11-08
打赏
举报
回复
肯定有问题的 下边是文件的内容 他是一个cvs的txt文件 要读取数据进行处理 按行读取 用stream 怎么才能分割的正好的呢 搞不定 那位帮忙 谢谢
1/10/2006 00:04:09 86-29-88986203 86-29-88986203 陕西 西安 86-29-81944866 陕西 西安 Outgoing Message CTC(PHS) 35 Call was answered
01/10/2006 00:04:50 86-29-88986203 86-29-81944866 陕西 西安 86-29-88986203 陕西 西安 Reply CTC(PHS) 17 Call was answered
01/10/2006 00:16:02 86-29-81265732 86-29-81265732 陕西 西安 86-29-83079593 陕西 西安 Outgoing Message CTC(PHS) 24 Call was answered
01/10/2006 00:18:18 86-29-81265732 86-29-81265732 陕西 西安 86-29-81068734 陕西 西安 Outgoing Message CTC(PHS) 33 Call was answered
捏造的信仰
2006-11-08
打赏
举报
回复
用 stream 一部分一部分的读。
healer_kx
2006-11-07
打赏
举报
回复
6MB太小了...100来兆都不大,你就读吧...
mengfanpp
2006-11-07
打赏
举报
回复
分次读取,一次读多少,处理完成后再继续读。
应该会有搂主说的问题,我原来的同事好像碰到过。
mathsfan
2006-11-07
打赏
举报
回复
看不懂了
hcqhappy
2006-11-07
打赏
举报
回复
谁能帮忙写个用缓存 分次读取 数据 然后分析 操作后 在读取下一部分的程序
angelleecash
2006-11-07
打赏
举报
回复
如果没有多线程的话,不应该乱码吧,不知道,帮顶
碧海情天-赵亮
2006-11-07
打赏
举报
回复
楼主把CVS的内容都用一个有效的记录填充,如果在几十K之内没问题,看看在几十M的时候有没有问题。如果真有数量限制,也可以测出来究竟临界值是多大。然后再说其余的。
加载更多回复(1)
java
按行
读取
大
文件
并解析入库
java
按行
读取
大容量文本
文件
,并按行解析入库。使用
java
.nio下面的相关方法
java
读取
局域网共享机器
文件
java
读取
局域网共享机器
文件
java
读取
局域网共享机器
文件
完美解决
java
读取
大
文件
内存溢出的问题
下面小编就为大家带来一篇完美解决
java
读取
大
文件
内存溢出的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
java
读取
本地.db
文件
实例
java
读取
本地.db
文件
简单方法,sqlite数据库类型
文件
获取数据
Java
读写Yaml
文件
的工具类-snakeyaml
java
通过snakeyaml类能非常方便的操作,读写yaml
文件
。
Java SE
62,614
社区成员
307,326
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章