2015-04-18 68 views
-4

根據一些博客帖子和論壇條目(例如http://www.java-tips.org/java-se-tips/java.util/scanning-text-with-java.util.scanner-3.html),可以使用掃描儀和\ Z作爲分隔符來讀取整個文件。 Normaly,這只是爲我工作,此代碼:掃描程序不時返回NoSuchElementException

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,並從中構建一個字符串,但因此它是必要的知道字符集,我不知道。

+5

請提供您的代碼。 – EvenLisle

+0

您需要爲我們提供足夠的信息來重現問題。代碼和文件的描述是至關重要的。 – CandiedOrange

回答

1

只需使用scanner.next()之前,嘗試測試,如果你有事情要讀下一個字符串令牌使用hasNext API,如:

if (scanner.hasNext()) { 
    ... = scanner.next(); 
    ... 
} 
+0

就像寫在這個問題上,我可以這樣描述在http://stackoverflow.com/questions/13963240/nosuchelementexception-in-scanner,但如果掃描儀沒有下一個條目,我什麼也得不到。我不明白爲什麼Scanner甚至找不到一個條目,它不應該總是在文件末尾找到至少一個\\ Z? –

相關問題