我正在处理由EOF字符未正确终止的文件引起的问题。
如何检测文件是否包含正确的EOF,如果Java / Scala中不存在正确添加它?
答案 0 :(得分:0)
我正在处理由EOF字符未正确终止的文件引起的问题。
实际上,我怀疑这是真的。在我的头脑中,我想不出任何主流操作系统需要终止带有EOF字符的文件。 (This article解释了" EOF字符"的神话,以及为什么^ Z或^ D都不是EOF字符。是的,有些贝壳将一个或另一个解释为EOF"标记&# 34;当通过控制台读取用户输入流时,但这是一个特殊情况......并且你的应用程序在读取流时肯定不会看到^ 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)更简单: