开发手册 欢迎您!
软件开发者资料库

Java Stream(流)、commons-io、BufferedReader 读文件的方法及示例代码

本文主要介绍Java中,通过Stream(流)、commons-io、BufferedReader读取文件的方法,以及相关的示例代码。

1、读取Classpath中的文本文件

ClassLoader classLoader = getClass().getClassLoader();InputStream inputStream = classLoader.getResourceAsStream("fileTest.txt");StringBuilder resultStringBuilder = new StringBuilder();try (BufferedReader br  = new BufferedReader(new InputStreamReader(inputStream))) {    String line;    while ((line = br.readLine()) != null) {        resultStringBuilder.append(line).append("\n");    }}catch (IOException e) {    e.printStackTrace();}String result = resultStringBuilder.toString();

2、使用commons-io读取文件

将File对象传递给FileUtils类的readFileToString()方法。commons-io程序类管理加载内容。

ClassLoader classLoader = getClass().getClassLoader();File file = new File(classLoader.getResource("fileTest.txt").getFile());String data = FileUtils.readFileToString(file, "UTF-8");

3、使用BufferedReader读取文件

String file ="src/test/resources/fileTest.txt";BufferedReader reader = new BufferedReader(new FileReader(file));String currentLine = reader.readLine();reader.close();

4、读取小文件和大文件

可以使用新的Files类读取小文件,如果我们想用Files类读取大文件,可以使用BufferedReader

例如,

下面的代码使用新的Files类和BufferedReader读取文件:

//小文件Path path = Paths.get("src/test/resources/fileTest.txt");String read = Files.readAllLines(path).get(0);//大文件Path path = Paths.get("src/test/resources/fileTest.txt");BufferedReader reader = Files.newBufferedReader(path);String line = reader.readLine();

5、使用Files.lines()读取文件

JDK8在Files类中提供了lines()方法。它返回一个String元素的Stream

Path path = Paths.get(getClass().getClassLoader().getResource("fileTest.txt").toURI());Stream lines = Files.lines(path);String data = lines.collect(Collectors.joining("\n"));lines.close();

6、使用DataInputStream读取文件

可以使用DataInputStream从文件中读取二进制或原始数据类型。

String file ="src/test/resources/fileTest.txt";String result = null;DataInputStream reader = new DataInputStream(new FileInputStream(file));int nBytesToRead = reader.available();if(nBytesToRead > 0) {    byte[] bytes = new byte[nBytesToRead];    reader.read(bytes);    result = new String(bytes);}

7、使用BufferedReader读取文件

读取一个大文件,FileChannel可以比标准IO更快。

String result = null;String file = "src/test/resources/fileTest.txt";RandomAccessFile reader = new RandomAccessFile(file, "r");FileChannel channel = reader.getChannel();int bufferSize = 1024;if (bufferSize > channel.size()) {    bufferSize = (int) channel.size();}ByteBuffer buff = ByteBuffer.allocate(bufferSize);channel.read(buff);buff.flip();String result =new String(buff.array());channel.close();reader.close();

8、读取UTF-8编码文件

使用BufferedReader可以读取UTF-8编码的文件。

例如,

String file = "src/test/resources/fileTestUtf8.txt";BufferedReader reader = new BufferedReader  (new InputStreamReader(new FileInputStream(file), "UTF-8"));String currentLine = reader.readLine();reader.close();

9、读取Jar中文件

String jarName="D://wonhero.jar";//Jar包所在的位置   String fileName="com/wonhero/path/java.txt";//文件在jar包里的路径      JarFile jarFile = new JarFile(jarName);//读入jar文件    JarEntry entry = jarFile.getJarEntry(fileName);       InputStream input = jarFile.getInputStream(entry);//读入需要的文件   StringBuilder resultStringBuilder = new StringBuilder();try (BufferedReader br  = new BufferedReader(new InputStreamReader(inputStream))) {    String line;    while ((line = br.readLine()) != null) {        resultStringBuilder.append(line).append("\n");    }}catch (IOException e) {    e.printStackTrace();}    jarFile.close();  String result = resultStringBuilder.toString();