java如何读取20多G的txt文档
我现在想读取20多g的日志文件用java 用了很多方法都不行 缓冲也不行 有木有人解决过这个问题啊!!!求助啊!
URL url=new URL(strUrl); BufferedReader br=new BufferedReader(new InputStreamReader(url.openStream(),"utf-8"),6*1024*1024); String s=""; StringBuffer sb=new StringBuffer(""); while((s=br.readLine())!=null) { System.out.println(s+"rn"); } br.close(); //这样不行 不知道加了缓冲还是不行 public static String fff = "C:/xxxx/xxxx.log"; public static void main1(String[] args) throws Exception { final int BUFFER_SIZE = 0x300000; File f = new File(fff); MappedByteBuffer inputBuffer = new RandomAccessFile(f, "r").getChannel().map(FileChannel.MapMode.READ_ONLY, f.length() / 2, f.length() / 2); byte[] dst = new byte[BUFFER_SIZE]; long start = System.currentTimeMillis(); for (int offset = 0; offset < inputBuffer.capacity(); offset += BUFFER_SIZE) { if (inputBuffer.capacity() - offset >= BUFFER_SIZE) { for (int i = 0; i < BUFFER_SIZE; i++) dst[i] = inputBuffer.get(offset + i); } else { for (int i = 0; i < inputBuffer.capacity() - offset; i++) dst[i] = inputBuffer.get(offset + i); } int length = (inputBuffer.capacity() % BUFFER_SIZE == 0) ? BUFFER_SIZE : inputBuffer.capacity() % BUFFER_SIZE; System.out.println(new String(dst, 0, length));// new } long end = System.currentTimeMillis(); } public static void main(String[] args) throws Exception { int bufSize = 1024; byte[] bs = new byte[bufSize]; ByteBuffer byteBuf = ByteBuffer.allocate(1024); FileChannel channel = new RandomAccessFile(fff, "r").getChannel(); while (channel.read(byteBuf) != -1) { int size = byteBuf.position(); byteBuf.rewind(); byteBuf.get(bs); System.out.print(new String(bs, 0, size)); byteBuf.clear(); } } public static void main2(String[] args) throws Exception { BufferedReader br = new BufferedReader(new FileReader(fff)); String line = null; while ((line = br.readLine()) != null) { System.out.println(line); } } //这个方法也不行 怎么解决啊 无助啊!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(29)
你电脑内存多大?
现在关键是读取都费劲!!! 只能用分割了!!!暂时没找到好的其他办法
读一部分处理一部分啊。如果非要作整个数据的分析处理,可以读出来,然后保存到数据库再利用数据库处理。
3g 的内存 jdk虚拟机 没加!
这个在windows下实在是太难处理了,先分割成n块然后再逐个解析才行。如果在linux下用awk,sed神马的方便死了,还快的不行。
可以对大数据操作嘛?你说的这个 我没用过 呵呵!!
楼上的能不造谣么?
都是帮忙嘛!呵呵
楼上上,就因为linux上面有这些工具,就说Windows系统不行?要是哪天Windows上面出现了人工智能,你是不是又要说
"这个在linux下实在是太难处理了,还得用awk,sed这些工具,在Windows上面,我只要眨眨眼神就搞定了,哦,还快的不行"...
真搞不懂,你竟然用工具软件的好坏来评定操作系统...
@徐斌 呵呵 嗯!
回复
所以才不能用某些软件来评判操作系统呀
不是的 比如backtrack 5里面出了很多安全测试软件 但是windows 就没有那么多 但是用户体验度 大人群来说 windows有的 linux也没有 这个……!!!
一般都是先分割成多个文件,在分别处理这些文件
只能这么做了
那么,如果硬盘空间不足,那怎么办?
@傲焰枫 对啊 当初要有索引也ok 建立索引 然后再用seek去找也行
回复
!呃,是分段?
不会出现这种状况的 分割了 只是大小分割开 不会影响的
这个是失误 n年前元老做的 后来就没改 导致生产那么大的文件 之后没办法 想分析日志 就倒霉了!
有没有想过会出现20多G的日志文件本身就是系统上设计的问题呢?:)
好的 谢谢 我试试 先 用了缓冲也不行
谢谢了亲 解决方案找到了 用nio分割日志文件 然后再去读取所有文件输出数据 谢谢啦!不过文件有点多了 呵呵
fat是不能超过4G吧?
FAT32的话,单个文件不能超过4G的。
试试NIO读写啊,传统的IO读写肯定会出问题,在FAT32分区下单个文件超过2G貌似都会出问题,别说你那20G的怪兽呢。
原来已经在这里了,不错呀。
建立一个索引是什么意思?
回复
可以贴出代码看看么,分享分享
试试NIO读写啊,传统的IO读写肯定会出问题,在FAT32分区下单个文件超过2G貌似都会出问题,别说你那20G的怪兽呢。