如何在不使用包的情况下确定给定路径是Java中的文件还是目录?

时间:2019-01-13 19:20:12

标签: java file directory

我正在创建一个Java程序,该程序无需使用任何程序包即可确定给定路径是文件还是目录。
区分文件和目录的属性是什么?
另外,isFile()中的isDirectory()java.io.File方法在后端如何工作?

我尝试与扩展名分开,但是发现目录名也可以包含句点之后的字符,例如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作为参数传递,它应该从true函数返回isDirectory()值,而当C:\users\file.txt时,它应该返回false。相同的逻辑适用于isFile()方法。

2 个答案:

答案 0 :(得分:2)

没有办法。

非常简单:

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

换句话说:在没有检查文件系统的情况下,没有方法来知道任意字符串代表文件还是目录。更重要的是:没有没有方式仅从“路径字符串”中导出“文件或目录”。

答案 1 :(得分:2)

什么是文件,什么是目录最终取决于文件系统。为了区分文件和目录,JVM将调用文件系统并获取信息。仅知道Dataset A是不够的。

如果您想更深入地研究,它将变得更加复杂。例如,在Linux Ext4文件系统内部,所有内容都是文件。根据{{​​3}},目录只是一个包含更多信息的特殊文件:

  

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