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

编程

方式1:

  通过BufferedReader的readLine()方法。

/**

* 功能:Java读取txt文件的内容 步骤:

*1:先获得文件句柄

*2:获得文件句柄当做是输入一个字节码流,需要对这个输入流进行读取

*3:读取到输入流后,需要读取生成字节流

*4:一行一行的输出。readline()。

*备注:需要考虑的是异常情况

*

* @param filePath

* 文件路径[到达文件:如: c:x.txt]

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

*/

public static List<String> readTxtFileIntoStringArrList(String filePath)

{

List<String> list = new ArrayList<String>();

try

{

String encoding = "GBK";

File file = new File(filePath);

if (file.isFile() && file.exists())

{ // 判断文件是否存在

InputStreamReader read = new InputStreamReader(

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

BufferedReader bufferedReader = new BufferedReader(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();

}

return list;

}

方式2

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

/**

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

* @param filePath 文件的路径

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

*/

public static String[] readToString(String filePath)

{

File file = new File(filePath);

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

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

try

{

FileInputStream in = new FileInputStream(file);

in.read(filecontent);

in.close();

} catch (FileNotFoundException e)

{

e.printStackTrace();

} catch (IOException e)

{

e.printStackTrace();

}

String[] fileContentArr = new String(filecontent).split("

");

return fileContentArr;// 返回文件内容,默认编码

}

测试:

public static void main(String[] args)

{

List<String> stringList = readTxtFileIntoStringArrList("C:\h.log");

System.out.println("-------使用BufferedReader读取-----------");

for(String str : stringList)

{

System.out.println(str);

}

System.out.println("

---------使用byte直接缓存整个文件到内存----------------");

String[] stringArr = readToString("C:\h.log");

for(int i = 0 ; i < stringArr.length ; i ++)

{

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

}

}

 

比较

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

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

以上是 读取文件,将文件中的数据一行行的取出。 的全部内容, 来源链接: utcz.com/z/517472.html

回到顶部