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());Streamlines = 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();