我正在创建一个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()
方法。
答案 0 :(得分:2)
没有办法。
非常简单:
换句话说:在没有检查文件系统的情况下,没有方法来知道任意字符串代表文件还是目录。更重要的是:没有没有方式仅从“路径字符串”中导出“文件或目录”。
答案 1 :(得分:2)
什么是文件,什么是目录最终取决于文件系统。为了区分文件和目录,JVM将调用文件系统并获取信息。仅知道Dataset A
是不够的。
如果您想更深入地研究,它将变得更加复杂。例如,在Linux Ext4文件系统内部,所有内容都是文件。根据{{3}},目录只是一个包含更多信息的特殊文件:
在ext4文件系统中,目录或多或少是一个平面文件,该文件将任意字节字符串(通常是ASCII)映射到文件系统上的inode编号。文件系统中可能有许多目录条目引用相同的inode编号-这些被称为硬链接,这就是为什么硬链接无法引用其他文件系统上的文件的原因。这样,通过读取与用于期望的特定目录条目的目录文件相关联的数据块来找到目录条目。