1
A
回答
0
我正在處理由EOF字符未正確終止的文件引起的問題。
其實,我懷疑那是真的。關於我的頭頂,我想不出任何需要使用EOF字符終止文件的主流操作系統。 (This article解釋了「EOF字符」的神話,以及爲什麼^ Z或^ D都不是EOF字符。是的,當通過控制檯讀取用戶輸入流時,某些shell將其中一個或另一個解釋爲EOF「標記」是一種特殊情況...並且您的應用程序在讀取流時肯定不會看到^ Z或^ D)。
您可能已將代碼編入期望某種EOF字符。如果你有,那麼最好的解決方案可能是修復應用程序。 (我想不出設計應用程序以這種方式工作的好理由......)
這也有可能是你真正的問題是別的。例如,您可能有文件的最後一行不能以可識別的行尾序列結尾。這當然會導致一些經典的Linux/Unix工具出現問題。
爲了完整起見,以下是您提出的問題的答案。
如何檢測文件是否包含正確的EOF,並在Java/Scala中不存在時正確添加它?
判斷文件是否不以特定字符(例如^ Z)結尾的方法是簡單讀取文件的最後一個字符並對其進行測試。例如,在Java(未測試):
import java.io.*;
public class TestForArcaneEOF {
public static void main(String[] args) throws IOException {
Reader reader;
if (args.length == 0) {
reader = new InputStreamReader(System.in);
} else {
reader = new FileReader(args[0]);
}
reader = new BufferedReader(reader);
int last = 0;
int ch;
while ((ch = reader.read()) != -1) {
last = ch;
}
if (last == 0x1a) {
System.out.println("Ends with ^Z");
} else {
System.out.println("Doesn't end with ^Z");
}
}
}
添加在文件末尾的字符(例如^ Z)是更簡單:
- 打開在 「追加」 模式的文件。
- 寫下字符。
- 關閉文件。
相關問題
- 1. 確定字符串是否以另一個字符串結尾
- 2. MPMusicPlayerControllerPlaybackStateDidChangeNotification確定歌曲是否已結束
- 3. 正確結束SoundEffectInstance
- 4. 確定字符串是否以空格結尾
- 5. 是否有方法確定字符串格式正確?
- 6. 如何正確讀取文件到EOF
- 7. 爲什麼不能正確解釋文件結束符?
- 8. 當確定流結束時EOF出現問題
- 9. 確定字符串是否是c#中的文件名
- 10. 確定字符串是否爲「肯定」?
- 11. 確定是否char值是字符
- 12. 檢查字符串是否正確
- 13. 確定JSON文件是否已正確下載?
- 14. Oracle:SQL沒有正確結束
- 15. 命令未正確結束
- 16. 以下是否正確?
- 17. 正確的字符串開始和結束的數字
- 18. 不確定strpos()是否正確使用
- 19. 以null結束符結尾的字符串文字是否包含額外的null結束符?
- 20. 正則表達式,以確定是否一個文件是一個RAR文件
- 21. 如何確定字符串是否不是正則表達式?
- 22. 確定一個字符是否是正斜槓
- 23. 確定給定字符串是否是有效迴文。 JS
- 24. 確定是否*字符<INT_MAX
- 25. 確定字符是否可打印
- 26. 確定Unicode字符是否可見?
- 27. 確定文件結構(描述文件描述符)是否爲'特殊文件'(即塊/字符設備)
- 28. 確定字符串是否以字母A到I開頭
- 29. 確定列值字符串是否以數字開頭
- 30. 我可以確定一個字符串是否是MongoDB ObjectID?
您必須嘗試過某些東西。 – 2015-04-07 10:42:12
通常情況下,文件不會以任何EOF字符結尾,實際上沒有字符標記文件的結尾,您在這裏遇到困惑。您可以用十六進制編輯器打開文件,看看是否有任何「EOF」字符;你會發現沒有。 – m0skit0
你不能只讀該文件的最後一個字節,並檢查它是什麼?但是,我不認爲文件使用EOF字符標記結束 - 這通常是控制檯的東西。 – Dan