【问题标题】:Given a pathname, how can I tell whether the object is a directory or a file using the Java File API?给定路径名,如何使用 Java File API 判断对象是目录还是文件?
【发布时间】:2013-04-28 13:46:13
【问题描述】:

给定绝对路径作为变量字符串路径名,如何使用 Java 类文件执行以下操作?据我所知,答案在括号内,请确认。

  1. 获取文件/目录的大小? (我不确定)

  2. 测试绝对路径是否甚至导致存在的东西? (File.exists(pathname),如果存在则返回布尔值 true,否则返回布尔值 false)

  3. 看看这是文件还是目录? (File.isFile(pathname),如果路径名指向文件,则返回布尔值 true,否则返回 false。file.isDirectory(pathname),如果路径名指向目录,则返回布尔值 true,否则返回 false)

  4. 查看上次修改日期? (File.lastModified(pathname),它返回一个长数字,我已经有方法可以将其转换为特定日期

一个相关但独立的问题:是否存在某种“文件”,例如 .doc、.jpeg、.mpeg、.mp3、.xml、.* 会导致 isFile 和 isDirectory 测试失败?如果是这样,我如何区分一个空文件夹和一个文件在 isFile 和 isDirectory 测试中都失败的文件夹?我之所以问,是因为在 File 类文档中,它为 isFile 说明了以下内容:测试此抽象路径名表示的文件是否为普通文件。如果文件不是目录,并且满足其他系统相关标准,则该文件是正常的。 Java 应用程序创建的任何非目录文件都保证是普通文件。

【问题讨论】:

  • 对于文件或目录检查这个java-examples.com/determine-file-or-directory
  • “系统相关标准”指的是 UNIX 的套接字、命名管道或特殊文件 (/dev/null)。任何表示写入磁盘的数据的文件基本上都是普通文件。

标签: java


【解决方案1】:

是否存在某种“文件”,例如 .doc、.jpeg、.mpeg、.mp3、.xml、.* 会导致 isFile 和 isDirectory 测试失败?

没有。这些都是常规文件。如果是文件,则通过isFile测试。

不是“普通文件”或目录的东西是设备文件和命名管道文件之类的东西。 java.io.File 无法准确区分这些...或符号链接。

如果您希望能够执行特定于操作系统的操作,请查看 Java 7 的 java.nio.file 包,特别是 Files 类。

【讨论】:

    【解决方案2】:
    File f = new File(path);
    // Get size of file (not a directory though)
    f.length();
    // Check if file exists
    f.exists();
    // Check if file is directory
    f.isDirectory();
    // Check if file is file
    f.isFile();
    // Last modified date
    f.lastModified();
    

    参考:JavaDoc for java.io.File

    如果您想要目录的大小,则必须在遍历要为其计算大小的目录时结合这些方法,或者您可以使用第三方库,例如 Apache Commons IO 中的 FileUtils有一个sizeOf 方法,显然也可以处理目录的大小。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-13
      • 2010-11-03
      • 2012-07-17
      • 1970-01-01
      • 1970-01-01
      • 2015-07-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多