黑马程序员技术交流社区

标题: JAVA一次读取文本文件的所有内容 [打印本页]

作者: Joemi    时间: 2014-8-6 20:39
标题: JAVA一次读取文本文件的所有内容
本帖最后由 Joemi 于 2014-8-9 09:28 编辑

我们都习惯于一次把文本的原始内容直接读取到内存中再做处理(暂时不考虑内存大小),这样做效率也会提高。很多人用readline()之类的方法,可能需要反复访问文件,而且每次readline()都会调用编码转换,降低了速度,所以,在已知编码的情况下,按字节流方式先将文件都读入内存,再一次性编码转换是最快的方式,如:
  1. import java.io.*;

  2. public class testIO {
  3.         public static void main(String[] args) {
  4.                 File file=new File("c://test.txt");  //我的文件在C盘下
  5.                 //String content=readToString(file);
  6.                 System.out.println(readToString(file));
  7.         }
  8.         
  9.         public static String readToString(File file) {
  10.                 Long filelength = file.length();     //获取文件长度
  11.                 byte[] filecontent = new byte[filelength.intValue()];
  12.                 try {
  13.                     FileInputStream in = new FileInputStream(file);
  14.                     in.read(filecontent);
  15.                     in.close();
  16.                 } catch (FileNotFoundException e) {
  17.                     e.printStackTrace();
  18.                 } catch (IOException e) {
  19.                     e.printStackTrace();
  20.                 }
  21.                 return new String(filecontent);//返回文件内容,默认编码
  22.         }


  23. }
复制代码

这种方法的好处是读取的内容可以彻底保持文件的原貌,而且速度应该是最快的,因为只需要调用一次文件访问,字符编码转换也只需要一次。上面的代码我都是默认的编码,文件编码不同,道理都是一样的!!!
作者: Joemi    时间: 2014-8-7 07:59
帖子秒沉,自己顶一下~
作者: masai158    时间: 2014-8-7 08:32
嗯!好!是个好方法,学习了。
readToString 反正都都是字符串,主函数就不用在 new String了。
{:2_36:}
作者: 申航航    时间: 2014-8-7 08:37
是个好方法,学习了
作者: 叶飞翔    时间: 2014-8-7 09:08
masai158 发表于 2014-8-7 08:32
嗯!好!是个好方法,学习了。
readToString 反正都都是字符串,主函数就不用在 new String了。
...

哈哈,你眼真尖啊
作者: zhxu188    时间: 2014-8-7 10:09
方法是好,可是当文件内容超过虚拟机的空间时就不行了
作者: masai158    时间: 2014-8-7 10:48
叶飞翔 发表于 2014-8-7 09:08
哈哈,你眼真尖啊

{:2_36:}{:2_36:}{:2_36:}。。哈哈。我是水经验的。
作者: 逍遥客    时间: 2014-8-7 10:50
很好,保存一下
作者: 大★宝    时间: 2014-8-7 10:57
知识回顾,赞
作者: 叶飞翔    时间: 2014-8-7 11:15
楼主,我感觉获取文本长度会不会花费很多时间,总感觉你的理论没这么简单。。。。要不然还要多长读取干嘛。。。
作者: 叶飞翔    时间: 2014-8-7 11:16
zhxu188 发表于 2014-8-7 10:09
方法是好,可是当文件内容超过虚拟机的空间时就不行了

对啊,对啊,一语惊醒梦中人啊,总感觉楼主的思路哪地方肯定忽略了。。。。是的,如果文件内容多大,那么一下读取就会超过虚拟机的内存空间了,然后就产生问题了。
作者: Ezreal    时间: 2014-8-7 16:39
我又回来了!!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2