当前位置: 首页 > 面试题库 >

Java:查找文件的最后一行是否为空

元嘉木
2023-03-14
问题内容

我有一个关于学校作业的问题,我需要用Java来完成。我需要从文件加载数据并检查这些文件中的错误。

我读取带有的文件,该文件在文件bufferedReader末尾之前都可以正常运行:如果该行为空,它将忽略最后一行。

我知道如何检查空行,但是使用的readLine()功能,最后一行根本不会给出任何结果bufferedReader

重要的是,我知道最后一行是否必须为空。如果空行不存在,则应该给出错误。

长话短说,我需要一种方法来说明以下情况(CRLF行尾在哪里)之间的区别:

情况1(正确):

line x CRLF
line y CRLF

情况2(错误):

line x CRLF
line y

这两种情况都将readline()在y行之后返回null 。

我正在计算文件的行数,因此,如果我有一个行计数器(注意:该计数器也必须计算该空行,所以我发现的所有行都没有对它们进行计数)

文件中也始终包含空行,如果这对我需要的代码有什么不同(这些行将被正确检测,因为它们应该EOF不在这些行上)

请注意,该程序可以使用最后一行,也可以不使用最后一行,这纯粹是因为赋值告诉我如果不存在该错误,则会给出错误。


问题答案:

如果要确定最后一行是否具有CRLF,则可以从末尾读取。

public static boolean lastLineisCRLF(String filename) {
    RandomAccessFile raf = null;
    try {
        raf = new RandomAccessFile(filename, "r");
        long pos = raf.length() - 2;
        if (pos < 0) return false; // too short
        raf.seek(pos);
        return raf.read() == '\r' && raf.read() == '\n';
    } catch (IOException e) {
        return false;
    } finally {
        if (raf != null) try {
            raf.close();
        } catch (IOException ignored) {
        }
    }
}


 类似资料:
  • 问题内容: 我需要查询方面的帮助。 我有这个简单的表: 看起来像这样: 我想为给定的readVal获得最后的连续行: 在上面的示例中将是: id:3 for readVal = 2 id:8 for readVal = 3 我尝试了以下查询: 只要该系列中没有缺失的ID,它就可以工作。在上面的示例中,编号4缺失,查询将不会返回预期的结果。 谢谢! 问题答案: 返回: 对于还需要最后一行的情况: 返

  • 在Transform函数中编写NodeJS Transform stream时,我如何知道该块是最后一块还是没有任何新块出现。 所以我需要知道何时进入Stream的块结束,对由所有块组成的缓冲区进行一些处理,然后从流中推送处理过的数据。

  • 问题内容: 如何检查Java 7中文件是否为空? 我使用ObjectInputStream的available()方法进行了尝试,但是即使文件包含数据,它也始终返回零。 问题答案: File file = new File(“file_path”); System.out.println(file.length());

  • 问题内容: 我正在使用JSch从SFTP服务器获取文件,但是我试图找出一种方法来仅获取最旧的文件,并确保当前未将其写入。我想象自己这样做的方式是,首先找到指定远程文件夹中哪个文件最旧。然后,我将检查文件大小,等待x秒(大约10秒,为了安全起见),然后再次检查。如果文件大小没有更改,我将下载文件并进行处理。但是,我不知道该怎么做!如果有人知道如何执行此操作,或者知道其他支持具有此内置SFTP的功能(

  • 问题内容: 我有一个文件,我想用Java处理。我要删除其最后一行。 我需要关于如何实现此目标的想法,而不必将整个内容复制到另一个文件中,而忽略最后一行。有什么建议? 问题答案: 您可以通过扫描文件找到最后一行的开头,然后使用或截断它。