【问题标题】:See if file is empty [duplicate]查看文件是否为空[重复]
【发布时间】:2012-04-23 13:21:47
【问题描述】:

可能重复:
Most efficient way to check if a file is empty in Java on Windows

如何在 Java 7 中检查文件是否为空?
我使用 ObjectInputStream 中的 available() 方法进行了尝试,但即使文件包含数据,它也始终返回零。

【问题讨论】:

    标签: java


    【解决方案1】:
    File file = new File("file_path");
    System.out.println(file.length());
    

    【讨论】:

    • 自 Java 7 以来一个棘手的解决方案是使用 java.nio.Files 类。然后,您可以在一行中执行相同的操作。例如:System.out.println(Files.size(Paths.get("file_path")));
    • 不适用于 Unicode 文件(有关详细信息,请参阅重复消息中的答案)。
    【解决方案2】:
    File file = new File(path);
    
    boolean empty = !file.exists() || file.length() == 0;
    

    可以简写为:

    boolean empty = file.length() == 0;
    

    因为根据文档该方法返回

    此抽象路径名表示的文件的长度,以字节为单位,如果文件不存在,则为 0L

    【讨论】:

    • 嘿@Jack,我认为它应该作为我下面的答案。如果我错了,请纠正我。
    • 这取决于您为什么需要检查文件是否为空。您可能需要将不存在的文件视为空或不存在。所以你的答案可能和我的一样正确,而不是。
    • 但是我觉得即使在这种情况下,如果文件不存在,我们也不必检查它是否为空。所以,对于一个不存在的文件,我的回答保存了对 file.length() 的调用。效率略有提高,但我觉得这是合乎逻辑的。如果我错了,请纠正我。
    • 在您的 sn-p 中,如果文件不存在则 empty == false。在我的 sn-p 中,如果文件不存在,第一个条件评估为真,因此文件的长度也没有检查,但结果不同(请记住,这是一个 ||,评估的惰性适用于 @ 987654325@ 和 ||operators)。
    • 此外,在任何情况下都不需要检查是否存在,因为如果文件不存在,file.length() 返回0,这只是为了可读性。
    【解决方案3】:

    根据 J2RE javadocs:http://docs.oracle.com/javase/7/docs/api/java/io/File.html#length()

    public long length()
        Returns the length of the file denoted by this abstract pathname. The return value is     unspecified if this pathname denotes a directory.
    

    所以new File("path to your file").length() > 0 应该可以解决问题。抱歉 bd 之前的回答。 :(

    【讨论】:

      【解决方案4】:
      BufferedReader br = new BufferedReader(new FileReader("your_location"));     
      if (br.readLine()) == null ) {
          System.out.println("No errors, and file empty");
      }
      

      Most efficient way to check if a file is empty in Java on Windows

      【讨论】:

      • @sans481 链接的帖子几乎列举了人类已知的所有方法。这些方法中的大多数通常都有效并且是正确的,只是那里的 OP 有一个非常具体的问题:实际上 not empty 的文件(其中有一个两个字节的 BOM)被认为是空的.
      • 现在我清楚地理解了你的意见。是的,仅仅为了判断一个文件是否为空而读取整行真是一场灾难。如果第一行很大,情况会变得更糟。谢谢!
      【解决方案5】:
      File file = new File(path);
      
      boolean empty = file.exists() && file.length() == 0;
      

      我要强调的是,如果我们要检查文件是否为空,那么我们必须考虑它是否存在。

      【讨论】:

      • 我认为这个是正确的答案。如果您检查长度方法的 javadocs,它会说如果文件“无效”,它将返回 0。
      【解决方案6】:
              File file = new File("path.txt");
              if (file.exists()) {
                  FileReader fr = new FileReader(file);
                  if (fr.read() == -1) {
                      System.out.println("EMPTY");
                  } else {
                      System.out.println("NOT EMPTY");
                  }
              } else {
                  System.out.println("DOES NOT EXISTS");
              }
      

      【讨论】:

        猜你喜欢
        • 2014-12-16
        • 2015-07-19
        • 1970-01-01
        • 1970-01-01
        • 2013-05-11
        • 1970-01-01
        • 2013-03-31
        • 1970-01-01
        相关资源
        最近更新 更多