使用EOF字符确定文件是否正确结束

时间:2015-04-07 10:41:23

标签: java scala eof

我正在处理由EOF字符未正确终止的文件引起的问题。

如何检测文件是否包含正确的EOF,如果Java / Scala中不存在正确添加它?

1 个答案:

答案 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)更简单:

  1. 在&#34中打开文件;追加"模式。
  2. 写下角色。
  3. 关闭文件。