java.nio.file.Files
只有在处理小文件并且需要内存中的所有文件内容时,才应使用此方法。
private static void readUsingFiles(String fileName) throwsIOException {
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 allLines =Files.readAllLines(path, StandardCharsets.UTF_8);
System.out.println(newString(bytes));
}
java.io.FileReader
FileReader不支持编码并且使用系统默认编码,因此它不是非常有效的在java中读取文件的方式。
private static void readUsingFileReader(String fileName) throwsIOException {
File file= newFile(fileName);
FileReader fr= newFileReader(file);
BufferedReader br= newBufferedReader(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) throwsIOException {
File file= newFile(fileName);
FileInputStream fis= newFileInputStream(file);
InputStreamReader isr= newInputStreamReader(fis, cs);
BufferedReader br= newBufferedReader(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) throwsIOException {
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) throwsIOException {
File file= newFile(fileName);
FileReader fr= newFileReader(file);
BufferedReader br= newBufferedReader(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) throwsIOException {
Path path=Paths.get(fileName);
Scanner scanner= newScanner(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();
}