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

如何在不使用包的情况下识别Java中给定的路径是文件还是目录?,java,file,directory,Java,File,Directory,我正在创建一个Java程序,该程序可以识别给定路径是文件还是目录,而不使用任何包。 区分文件和目录的属性是什么? 另外,java.io.File中的isFile()和isDirectory()方法如何在后端工作 我尝试从扩展名中分离出来,但发现目录名也可以包含句点后的字符,如directoryName.extension。我在互联网上做了一些研究,但没有找到解决方案 class FileCheck{ public static void main(String[] args){

我正在创建一个Java程序,该程序可以识别给定路径是文件还是目录,而不使用任何包。
区分文件和目录的属性是什么?
另外,
java.io.File
中的
isFile()
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接口即可

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

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

如果你想挖得更深,它会变得更复杂。例如,在Linux Ext4文件系统内部,所有内容都是一个文件。目录只是一个包含更多信息的特殊文件,如下所示:

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


这不是关于Java的问题,而是关于文件系统的问题。因此,我不确定堆栈溢出是否是合适的位置。它可能在我们的一个网站上工作,但请在询问之前查看每个网站的帮助中心。为什么。。“不使用软件包”(你的意思似乎是指
文件
API)?@andrewhompson是的,它的意思是不使用
文件
API。谢谢你的回答。谢谢你的回复。