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. MPMusicPlayerControllerPlaybackStateDidChangeNotification确定歌曲是否已结束
- 2. 确定字符串是否以空格结尾
- 3. 是否有方法确定字符串格式正确?
- 4. 为什么不能正确解释文件结束符?
- 5. 当确定流结束时EOF出现问题
- 6. Oracle:SQL没有正确结束
- 7. 正确的字符串开始和结束的数字
- 8. 以下是否正确?
- 9. 不确定strpos()是否正确使用
- 10. 正则表达式,以确定是否一个文件是一个RAR文件
- 11. 如何确定字符串是否不是正则表达式?
- 12. 确定给定字符串是否是有效回文。 JS
- 13. 确定Unicode字符是否可见?
- 14. .EOF VB,VBA的文件结束
- 15. 结束在C程序文件(EOF)的
- 16. 确定列值字符串是否以数字开头
- 17. 确定字符串是否以字母A到I开头
- 18. 如何正确确定在QTCPSocket中已达到输入结束?
- 19. ORA-01756:引用字符串没有正确结束
- 20. 这个Robots.txt文件是否正确?
- 21. c#,检查文件是否正确
- 22. 如何确定在C++中使用getline()时是否是EOF?
- 23. 确定以字符串
- 24. 是否可以确定pthread_t结构是否未使用?
- 25. objective-c:确定正则表达式是否匹配字符串
- 26. 正则表达式来确定字符串是否得分
- 27. 确定Groovy中的月份是否几乎结束
- 28. 使用Rx确定鼠标拖动结束的正确方法是什么?
- 29. 我试图确定一个字符串是否是回文
- 30. 确定字符串是否是文本中的专有名词
您必须尝试过某些东西。 – 2015-04-07 10:42:12
通常情况下,文件不会以任何EOF字符结尾,实际上没有字符标记文件的结尾,您在这里遇到困惑。您可以用十六进制编辑器打开文件,看看是否有任何“EOF”字符;你会发现没有。 – m0skit0
你不能只读该文件的最后一个字节,并检查它是什么?但是,我不认为文件使用EOF字符标记结束 - 这通常是控制台的东西。 – Dan