根据一些博文和论坛条目(例如http://www.java-tips.org/java-se-tips/java.util/scanning-text-with-java.util.scanner-3.html),可以使用带有\ Z作为分隔符的Scanner来读取整个文件。 Normaly,这对我来说只有这个代码:
log.debug("CSV-File: {} {}", csvFile.exists(), csvFile);
try (Scanner scanner = new Scanner(csvFile)) {
String fileContent = scanner.useDelimiter("\\Z").next();
log.debug("FileContent: {}", fileContent);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
但有些文件(据我所知,全部用UTF-8编写)无法以这种方式读取,因为抛出了这样的异常:
java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:862)
at java.util.Scanner.next(Scanner.java:1371)
...
对于舒尔,我可以测试,天气有这样的元素,如NoSuchElementException in Scanner中所建议的那样。但是如果没有&Z,那么该程序就不会读取任何内容,这不是我的目标;我的目标是使用尽可能少的代码将整个文件读入一个字符串。
我发现一个条目说这不能读取整个文件:http://closingbraces.net/2011/12/17/scanner-with-z-regex/但没有条目说\ Z不能出现在文件中。有谁知道为什么会这样,天气有变通方法?
可以选择使用Files.readAllBytes
,并从中构造一个String,但是因此需要知道charset,我不知道。
答案 0 :(得分:1)
在使用scanner.next()
之前,尝试使用hasNext api测试您是否有要读取下一个字符串标记的内容:
if (scanner.hasNext()) {
... = scanner.next();
...
}