繁体   English   中英

Java isFile(), isDirectory() 不检查是否存在

[英]Java isFile(), isDirectory() without checking for existence

我想检查给定的字符串是文件还是目录,我已经尝试了File类的方法 isFile() 和 isDirectory() 但问题是如果目录或文件不存在这些方法返回 false ,因为如 javadoc 中所述:

isFile() :

当且仅当此抽象路径名表示的文件存在并且是普通文件时才为真; 否则为假

isDirectory() :

当且仅当此抽象路径名表示的文件存在并且是目录时才为真; 否则为假

基本上我需要两种没有存在子句的方法......

所以我想在多平台上下文中测试给定的字符串是否符合目录格式或符合文件格式(因此,应该适用于 Windows、Linux 和 Mac Os X)。

是否存在一些提供这些方法的库? 这些方法的最佳实现是什么?

更新

在默认情况下可以是两者(无扩展名)的字符串的情况下,如果具有该路径的文件不存在,则应将其标识为目录。

所以我想在多平台上下文中测试给定的字符串是否符合目录格式或符合文件格式(因此,应该适用于 Windows、Linux 和 Mac Os X)。

在 Windows 中,目录可以有扩展名,而文件不需要有扩展名。 因此,您不能仅通过查看字符串来判断。

如果您强制规定目录没有扩展名,并且文件总是有扩展名,那么您可以通过查找扩展名来确定目录和文件之间的区别。

为什么不将它们包装在对File#exists()的调用中?

File file = new File(...);
if (file.exists()) {

    // call isFile() or isDirectory()

}

通过这样做,您已经有效地否定了isFile()isDirectory()的“存在”部分,因为您可以保证它确实存在。


我也可能误解了你在这里问的问题。 鉴于你问题的第二部分,是你想使用isFile()isDirectory()上不存在的文件,看看他们喜欢看他们的文件或目录?

如果是这样,这将很难用File API 来完成(并且一般来说也很难做到)。 如果/foo/bar/baz不存在,则无法确定它是文件还是目录。 它可以是。

根据您的更新,听起来您知道自己想要什么:如果路径不存在并且路径具有扩展名,则它是一个文件,如果它不存在,则它是一个目录。 像这样的东西就足够了:

private boolean isPathDirectory(String myPath) {
    File test = new File(myPath);

    // check if the file/directory is already there
    if (!test.exists()) {
        // see if the file portion it doesn't have an extension
        return test.getName().lastIndexOf('.') == -1;
    } else {
        // see if the path that's already in place is a file or directory
        return test.isDirectory();
    }
}

文件和/或文件夹名称中的无效内容有一些规则。 例如,Windows 不允许* , ? ,以及其他一些字符。 根据无效的内容,您可以构建一个regex表达式或其他一些进程/检查系统,以查看它是否看起来像一个文件或文件夹。

这可能会变得复杂,因为您希望它适用于许多不同的操作系统。 此外,正如之前发布的那样,除非您人为地强制执行约定,否则无法从文件夹中区分文件。 例如,在 Windows 中,目录必须以前斜杠/结尾。

首先检查IF EXISTS会有所帮助。 如果IF EXISTS = true ,那么运行现有的File.isDirectory()File.isFile()代码将简化很多。 您只需为 IF EXISTS = false 编写代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM