java将文本数据按行取出_java 读取文件——按照行取出(使用BufferedReader和一次将数据保存到内存两种实现方式)...

1、实现目标

读取文件,将文件中的数据一行行的取出。

2、代码实现

1)、方式1:

通过BufferedReader的readLine()方法。

/*** 功能:Java读取txt文件的内容 步骤:1:先获得文件句柄 2:获得文件句柄当做是输入一个字节码流,需要对这个输入流进行读取

* 3:读取到输入流后,需要读取生成字节流 4:一行一行的输出。readline()。 备注:需要考虑的是异常情况

*

*@paramfilePath

* 文件路径[到达文件:如: D:\aa.txt]

*@return将这个文件按照每一行切割成数组存放到list中。*/

public static ListreadTxtFileIntoStringArrList(String filePath)

{

List list = new ArrayList();try{

String encoding= "GBK";

File file= newFile(filePath);if (file.isFile() &&file.exists())

{//判断文件是否存在

InputStreamReader read = newInputStreamReader(new FileInputStream(file), encoding);//考虑到编码格式

BufferedReader bufferedReader = newBufferedReader(read);

String lineTxt= null;while ((lineTxt = bufferedReader.readLine()) != null)

{

list.add(lineTxt);

}

bufferedReader.close();

read.close();

}else{

System.out.println("找不到指定的文件");

}

}catch(Exception e)

{

System.out.println("读取文件内容出错");

e.printStackTrace();

}returnlist;

}

2)、方式2

通过文件byte数组暂存文件中内容,将其转换为String数据,再按照 “回车换行” 进行分割。

/*** 读取filePath的文件,将文件中的数据按照行读取到String数组中

*@paramfilePath 文件的路径

*@return文件中一行一行的数据*/

public staticString[] readToString(String filePath)

{

File file= newFile(filePath);

Long filelength= file.length(); //获取文件长度

byte[] filecontent = new byte[filelength.intValue()];try{

FileInputStream in= newFileInputStream(file);

in.read(filecontent);

in.close();

}catch(FileNotFoundException e)

{

e.printStackTrace();

}catch(IOException e)

{

e.printStackTrace();

}

String[] fileContentArr= new String(filecontent).split("\r\n");return fileContentArr;//返回文件内容,默认编码

}

3)、测试

public static voidmain(String[] args)

{

List stringList = readTxtFileIntoStringArrList("C:\\soft\\java\\tomcat\\apache-tomcat-7.0.40\\webapps\\appDataGenerate\\log4j\\lepai_recognize_cache.log");

System.out.println("-------使用BufferedReader读取-----------");for(String str : stringList)

{

System.out.println(str);

}

System.out.println("\n---------使用byte直接缓存整个文件到内存----------------");

String[] stringArr= readToString("C:\\soft\\java\\tomcat\\apache-tomcat-7.0.40\\webapps\\appDataGenerate\\log4j\\lepai_recognize_cache.log");for(int i = 0 ; i < stringArr.length ; i ++)

{

System.out.println(stringArr[i]);

}

}

结果:

-------使用BufferedReader读取-----------[2015-11-30 13:21:28] [RecognizeCache] [INFO] : RecogizeCache init

[2015-11-30 13:21:28] [RecognizeCache] [INFO] : RecogizeCache init

[2015-11-30 13:21:28] [RecognizeCache] [INFO] : RecogizeCache init

[2015-11-30 13:21:28] [RecognizeCache] [INFO] : RecogizeCache init

[2015-12-01 14:52:04] [RecognizeCache] [INFO] : 读取文件:4209bad42de0f6e55c0daf0bd24b635a.txt---------使用byte直接缓存整个文件到内存----------------[2015-11-30 13:21:28] [RecognizeCache] [INFO] : RecogizeCache init

[2015-11-30 13:21:28] [RecognizeCache] [INFO] : RecogizeCache init

[2015-11-30 13:21:28] [RecognizeCache] [INFO] : RecogizeCache init

[2015-11-30 13:21:28] [RecognizeCache] [INFO] : RecogizeCache init

[2015-12-01 14:52:04] [RecognizeCache] [INFO] : 读取文件:4209bad42de0f6e55c0daf0bd24b635a.txt

3、比较

方式1是将文件的一部分或全部数据读取出来用BufferReader缓存起来,需要再冲缓存中取数据,这样比要得时候去文件中读取要快一些。

方式2是一次把文本的原始内容直接读取到内存中再做处理(暂时不考虑内存大小),这样做效率也会提高。同时,可以处理当你使用第1方式用readLine()方法时,文件又有线程在不断的向文件中写数据【只处理现在已经在文件中的数据】。另外,用readline()之类的方法,可能需要反复访问文件,而且每次readline()都会调用编码转换,降低了速度,所以,在已知编码的情况下,按字节流方式先将文件都读入内存,再一次性编码转换是最快的方式。

有错误的希望大牛不吝赐教。 想了解一下,

1、通过ftp取一个文件到本地,我如何判断对方的文件是否已经写完了。

2、当我使用上面的BufferedReader的readLine()方法一行行读取文件的时候,我还向文件中添加数据,会不会出现文件读取结束不了的情况。

源码下载:

致谢:感谢您的阅读!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值