`
hejiajunsh
  • 浏览: 402568 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

Java读取超大文本文件

阅读更多

方法1:使用BufferedReader类读写超大文件

		File file = new File("E:\\workspace(javaEE)\\StatisticsVisitor\\log\\tte\\2014\\03\\2014-03-26.log");
		BufferedInputStream fis = new BufferedInputStream(new FileInputStream(file));
		BufferedReader reader = new BufferedReader(new InputStreamReader(fis,"utf-8"),1024);// 用1KB的缓冲读取文本文件
		String line = "";
		while((line = reader.readLine()) != null){
			System.out.println(line);
		}
		reader.close();
		fis.close();

 

方法2:使用RandomAccessFile类读取

  public static void main(String[] args) throws Exception {
    int bufSize = 1024;
    byte[] bs = new byte[bufSize];
    // 这里是分配缓存大小。也就是用来存放从硬盘中度出来的文件
    // 什么叫一次把文件读出来?其实就是当缓存大小和在硬盘中文件大小一样,
    // 只通过一个read指令把整个文件都扔到缓存里面。例如要一次读一个2G的文件,把缓存设为2G就能一次读出来。
    // 不过当分配空间的时候,这个缓存根本是分配不出来的,因为内存不足。
    ByteBuffer byteBuf = ByteBuffer.allocate(bufSize);
    FileChannel channel = new RandomAccessFile("E:\\workspace(javaEE)\\StatisticsVisitor\\log\\tte\\2014\\03\\2014-03-26.log","r").getChannel();
    int size;
    // 因为这里缓存大小是1K,所以每个channel.read()指令最多只会读到文件的1K的内容。
    // 如果文件有1M大小,这里for会循环1024次,把文件分开1024次读取出来
    while((size = channel.read(byteBuf)) != -1) {
      byteBuf.rewind();
      byteBuf.get(bs);
      // 把文件当字符串处理,打印。
      System.out.print(new String(bs, 0, size));
      byteBuf.clear();
    }
    channel.close();
  }

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics