A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Joemi 中级黑马   /  2014-8-6 20:39  /  13876 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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. }
复制代码

这种方法的好处是读取的内容可以彻底保持文件的原貌,而且速度应该是最快的,因为只需要调用一次文件访问,字符编码转换也只需要一次。上面的代码我都是默认的编码,文件编码不同,道理都是一样的!!!

11 个回复

倒序浏览
帖子秒沉,自己顶一下~
回复 使用道具 举报
嗯!好!是个好方法,学习了。
readToString 反正都都是字符串,主函数就不用在 new String了。
{:2_36:}
回复 使用道具 举报
是个好方法,学习了
回复 使用道具 举报
masai158 发表于 2014-8-7 08:32
嗯!好!是个好方法,学习了。
readToString 反正都都是字符串,主函数就不用在 new String了。
...

哈哈,你眼真尖啊
回复 使用道具 举报
方法是好,可是当文件内容超过虚拟机的空间时就不行了
回复 使用道具 举报
叶飞翔 发表于 2014-8-7 09:08
哈哈,你眼真尖啊

{:2_36:}{:2_36:}{:2_36:}。。哈哈。我是水经验的。
回复 使用道具 举报
很好,保存一下
回复 使用道具 举报
知识回顾,赞
回复 使用道具 举报
楼主,我感觉获取文本长度会不会花费很多时间,总感觉你的理论没这么简单。。。。要不然还要多长读取干嘛。。。
回复 使用道具 举报
zhxu188 发表于 2014-8-7 10:09
方法是好,可是当文件内容超过虚拟机的空间时就不行了

对啊,对啊,一语惊醒梦中人啊,总感觉楼主的思路哪地方肯定忽略了。。。。是的,如果文件内容多大,那么一下读取就会超过虚拟机的内存空间了,然后就产生问题了。
回复 使用道具 举报
我又回来了!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马