【问题标题】:How to identify whether a given path is either file or directory in Java without using package?java - 如何在不使用包的情况下识别给定路径是Java中的文件还是目录?
【发布时间】:2019-01-13 19:20:11
【问题描述】:

我正在创建一个 Java 程序,它可以在不使用任何包的情况下识别给定路径是文件还是目录。
区分文件和目录的属性是什么?
另外,来自java.io.FileisFile()isDirectory() 方法在后端如何工作?

我尝试与扩展名分开,但发现目录名称也可以包含句点后的字符,如directoryName.extension。我在互联网上进行了一些研究,但未能找到可靠的解决方案。

class FileCheck{
    public static void main(String[] args){
        boolean checkOne = isFile(C:\users);
        boolean checkTwo = isFile(C:\users\file.txt);
        boolean checkThree = isDirectory(C:\users);
        boolean checkFour = isDirectory(C:\users\file.txt);
    }
}

不要与isFile()isDirectory() 方法混淆。它们是用户创建的功能;不是从java.io.File 导入的。

我希望如果我将C:\users 作为参数传递,它应该从isDirectory() 函数返回true 值,当C:\users\file.txt 时,它应该返回false。同样的逻辑也适用于isFile() 方法。

【问题讨论】:

  • 这不是关于 Java 的问题,而是关于文件系统的问题。因此,我不确定 Stack Overflow 是否适合这种情况。它可能适用于我们的sister sites 之一,但请在询问之前查看每个站点的帮助中心。
  • 为什么.. “不使用包”(您的意思似乎是File API)?
  • @AndrewThompson 是的,这意味着不使用File API。

标签: java file directory


【解决方案1】:

什么是文件,什么是目录,最终取决于文件系统。为了区分文件和目录,JVM 会调用文件系统并取回信息。只知道Path 是不够的。

如果你想深入挖掘,它会变得更复杂。例如,在 Linux Ext4 文件系统内部,一切都是文件。目录只是一个包含更多信息的特殊文件,根据Ext4 Disk Layout

在 ext4 文件系统中,目录或多或少是一个平面文件,它将任意字节字符串(通常是 ASCII)映射到文件系统上的 inode 号。整个文件系统中可能有许多目录条目引用相同的 inode 编号——这些被称为硬链接,这就是为什么硬链接不能引用其他文件系统上的文件的原因。这样,通过读取与所需特定目录条目的目录文件相关联的数据块来找到目录条目。

【讨论】:

  • 感谢您的回答。
【解决方案2】:

没有办法这样做。

其实很简单:

  • 如果您作为参数传递给此假设方法的字符串在文件系统中不存在...那么没有人可以告诉您该名称是文件还是目录。因为很容易两者兼而有之
  • 如果字符串表示现有事物:那么只需使用允许您查询它的 Java 接口即可。

换句话说:有没有方法可以知道任意字符串是否代表文件或目录,而无需检查文件系统。更重要的是:没有方法仅从“路径字符串”派生“文件或目录”。

【讨论】:

  • 感谢您的回答。
猜你喜欢
  • 2013-04-28
  • 2015-07-30
  • 1970-01-01
  • 2010-09-13
  • 1970-01-01
  • 2013-09-02
  • 1970-01-01
  • 1970-01-01
  • 2018-12-18
相关资源
最近更新 更多