Java读取文本文件
java.nio.file.Files
只有在处理小文件并且需要内存中的所有文件内容时,才应使用此方法。
private static void readUsingFiles(String fileName) throws IOException { Path path = Paths.get(fileName); //read file to byte array byte[] bytes = Files.readAllBytes(path); System.out.println("Read text file using Files class"); //read file to String list @SuppressWarnings("unused") List<String> allLines = Files.readAllLines(path, StandardCharsets.UTF_8); System.out.println(new String(bytes)); }
java.io.FileReader
FileReader不支持编码并且使用系统默认编码,因此它不是非常有效的在java中读取文件的方式。
private static void readUsingFileReader(String fileName) throws IOException { File file = new File(fileName); FileReader fr = new FileReader(file); BufferedReader br = new BufferedReader(fr); String line; System.out.println("Reading text file using FileReader"); while((line = br.readLine()) != null){ //process the line System.out.println(line); } br.close(); fr.close(); }
java.io.BufferedReader
适合处理大文件,它也支持编码。BufferedReader是同步的,因此对BufferedReader的读取操作可以安全地从多个线程完成。 BufferedReader的默认缓冲区大小为8KB。
private static void readUsingBufferedReader(String fileName, Charset cs) throws IOException { File file = new File(fileName); FileInputStream fis = new FileInputStream(file); InputStreamReader isr = new InputStreamReader(fis, cs); BufferedReader br = new BufferedReader(isr); String line; System.out.println("Read text file using InputStreamReader"); while((line = br.readLine()) != null){ //process the line System.out.println(line); } br.close(); }
private static void readUsingBufferedReaderJava7(String fileName, Charset cs) throws IOException { Path path = Paths.get(fileName); BufferedReader br = Files.newBufferedReader(path, cs); String line; System.out.println("Read text file using BufferedReader Java 7 improvement"); while((line = br.readLine()) != null){ //process the line System.out.println(line); } br.close(); }
private static void readUsingBufferedReader(String fileName) throws IOException { File file = new File(fileName); FileReader fr = new FileReader(file); BufferedReader br = new BufferedReader(fr); String line; System.out.println("Read text file using BufferedReader"); while((line = br.readLine()) != null){ //process the line System.out.println(line); } //close resources br.close(); fr.close(); }
java.util.Scanner
如果要逐行读取文件或基于一些Java正则表达式,Scanner是要使用的类。不是线程安全。
private static void readUsingScanner(String fileName) throws IOException { Path path = Paths.get(fileName); Scanner scanner = new Scanner(path); System.out.println("Read text file using Scanner"); //read line by line while(scanner.hasNextLine()){ //process each line String line = scanner.nextLine(); System.out.println(line); } scanner.close(); }