java如何读取20多G的txt文档

发布于 2021-11-16 07:58:45 字数 2130 浏览 801 评论 29

我现在想读取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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(29

不乱于心 2021-11-16 21:17:48

你电脑内存多大?

三月梨花 2021-11-16 21:17:48

现在关键是读取都费劲!!! 只能用分割了!!!暂时没找到好的其他办法

孤独患者 2021-11-16 21:17:48

读一部分处理一部分啊。如果非要作整个数据的分析处理,可以读出来,然后保存到数据库再利用数据库处理。

挽清梦 2021-11-16 21:17:48

3g 的内存 jdk虚拟机 没加!

百思不得你姐 2021-11-16 21:17:48

这个在windows下实在是太难处理了,先分割成n块然后再逐个解析才行。如果在linux下用awk,sed神马的方便死了,还快的不行。

夜血缘 2021-11-16 21:17:48

可以对大数据操作嘛?你说的这个 我没用过 呵呵!!

千笙结 2021-11-16 21:17:48

楼上的能不造谣么?

彩扇题诗 2021-11-16 21:17:48

都是帮忙嘛!呵呵

滥情空心 2021-11-16 21:17:48

楼上上,就因为linux上面有这些工具,就说Windows系统不行?要是哪天Windows上面出现了人工智能,你是不是又要说

"这个在linux下实在是太难处理了,还得用awk,sed这些工具,在Windows上面,我只要眨眨眼神就搞定了,哦,还快的不行"...

真搞不懂,你竟然用工具软件的好坏来评定操作系统...

酒几许 2021-11-16 21:17:48

@徐斌 呵呵 嗯!

深巷少女 2021-11-16 21:17:48

回复
所以才不能用某些软件来评判操作系统呀

把回忆走一遍 2021-11-16 21:17:48

不是的 比如backtrack 5里面出了很多安全测试软件 但是windows 就没有那么多 但是用户体验度 大人群来说 windows有的 linux也没有 这个……!!!

凌乱心跳 2021-11-16 21:17:48

一般都是先分割成多个文件,在分别处理这些文件

虐人心 2021-11-16 21:17:48

只能这么做了

吃颗糖壮壮胆 2021-11-16 21:17:48

那么,如果硬盘空间不足,那怎么办?

孤檠 2021-11-16 21:17:48

@傲焰枫 对啊 当初要有索引也ok 建立索引 然后再用seek去找也行

毁梦 2021-11-16 21:17:48

回复
!呃,是分段?

卸妝后依然美 2021-11-16 21:17:48

不会出现这种状况的 分割了 只是大小分割开 不会影响的

沦落红尘 2021-11-16 21:17:31

这个是失误 n年前元老做的 后来就没改 导致生产那么大的文件 之后没办法 想分析日志 就倒霉了!

情栀口红 2021-11-16 21:17:23

有没有想过会出现20多G的日志文件本身就是系统上设计的问题呢?:)

草莓味的萝莉 2021-11-16 21:16:56

好的 谢谢 我试试 先 用了缓冲也不行

累赘 2021-11-16 21:16:33

谢谢了亲 解决方案找到了 用nio分割日志文件 然后再去读取所有文件输出数据 谢谢啦!不过文件有点多了 呵呵

刘备忘录 2021-11-16 21:14:57

fat是不能超过4G吧?

拍不死你 2021-11-16 21:05:04

FAT32的话,单个文件不能超过4G的。

带上头具痛哭 2021-11-16 20:51:18

试试NIO读写啊,传统的IO读写肯定会出问题,在FAT32分区下单个文件超过2G貌似都会出问题,别说你那20G的怪兽呢。

德意的啸 2021-11-16 20:04:32

原来已经在这里了,不错呀。

复古式 2021-11-16 14:16:38

建立一个索引是什么意思?

命硬 2021-11-16 12:53:14

回复
可以贴出代码看看么,分享分享

长安忆 2021-11-16 12:06:14

试试NIO读写啊,传统的IO读写肯定会出问题,在FAT32分区下单个文件超过2G貌似都会出问题,别说你那20G的怪兽呢。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文