use*_*818 48 java file-io file
我的程序必须逐行读取文本文件.UTF-8中的文件.我不确定文件是否正确 - 可以包含不可打印的字符.是否可以检查它而不进入字节级别?谢谢.
T.J*_*der 121
使用a打开文件FileInputStream,然后使用InputStreamReader带有UTF-8 的文件Charset从流中读取字符,并使用a BufferedReader来读取行,例如via BufferedReader#readLine,这将为您提供一个字符串.获得字符串后,您可以检查不是您认为可打印的字符.
例如(没有错误检查),使用try-with-resources(模糊的现代Java版本):
String line;
try (
InputStream fis = new FileInputStream("the_file_name");
InputStreamReader isr = new InputStreamReader(fis, Charset.forName("UTF-8"));
BufferedReader br = new BufferedReader(isr);
) {
while ((line = br.readLine()) != null) {
// Deal with the line
}
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 49
虽然使用BufferedReader和手动执行此操作并不困难,但InputStreamReader我会使用Guava:
List<String> lines = Files.readLines(file, Charsets.UTF_8);
Run Code Online (Sandbox Code Playgroud)
然后你可以用这些线做任何你喜欢的事情.
编辑:请注意,这将一次性将整个文件读入内存.在大多数情况下,这实际上很好 - 而且它比逐行读取更简单,在阅读时处理每一行.如果它是一个巨大的文件,你可能需要按照TJ Crowder的答案那样做.
McI*_*osh 42
刚刚发现使用Java NIO(java.nio.file.*)您可以轻松编写:
List<String> lines=Files.readAllLines(Paths.get("/tmp/test.csv"), StandardCharsets.UTF_8);
for(String line:lines){
System.out.println(line);
}
Run Code Online (Sandbox Code Playgroud)
而不是处理FileInputStreams和 BufferedReaders ...
小智 11
下面怎么样:
FileReader fileReader = new FileReader(new File("test.txt"));
BufferedReader br = new BufferedReader(fileReader);
String line = null;
// if no more lines the readLine() returns null
while ((line = br.readLine()) != null) {
// reading lines until the end of the file
}
Run Code Online (Sandbox Code Playgroud)
资料来源:http://devmain.blogspot.co.uk/2013/10/java-quick-way-to-read-or-write-to-file.html
我可以找到以下方法.
private static final String fileName = "C:/Input.txt";
public static void main(String[] args) throws IOException {
Stream<String> lines = Files.lines(Paths.get(fileName));
lines.toArray(String[]::new);
List<String> readAllLines = Files.readAllLines(Paths.get(fileName));
readAllLines.forEach(s -> System.out.println(s));
File file = new File(fileName);
Scanner scanner = new Scanner(file);
while (scanner.hasNext()) {
System.out.println(scanner.next());
}
Run Code Online (Sandbox Code Playgroud)