本文主要介绍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<String> 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://cjavapy.jar";//Jar包所在的位置   
String fileName="com/cjavapy/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();    

推荐文档

相关文档

大家感兴趣的内容

随机列表