【问题标题】:myFile.isFile() or myFile.isDirectory() is there any third type of function possible?myFile.isFile() 或 myFile.isDirectory() 是否有任何第三种类型的函数可能?
【发布时间】:2018-11-16 22:25:35
【问题描述】:

我正在编写一个通用函数来检查变量是否包含文件或目录。所以我想出了一个使用布尔返回类型函数来检查它的想法。像这样:

function boolean checkFileOrDirectory(File myFile){
    // Assume file already exist
    if(myFile.isDirectory()){
        //myFile is a directory
        return true;
    } else {
        //myFile is a file
        return false;
    }
}

我想知道这个函数的准确性。如果有人能告诉我是否有任何类型的文件类型不属于 isFile() 或 isDirectory() ,我将不胜感激?

【问题讨论】:

  • "Tests whether the file denoted by this abstract pathname is a **normal** file. A file is normal if it is not a directory and, in addition, satisfies other system-dependent criteria"。这来自isFile 的文档。也许您只需要寻找文件不“正常”的那些例外情况
  • checkFileOrDirectory 方法名称未准确描述其功能
  • 如果不存在,they'll both return false.
  • file.exists() 怎么样; ?
  • 我通过注释清楚地表明该文件存在。 @ErnestKiwele 我肯定会查看非“正常”文件,我应该从哪里开始?

标签: java java-io


【解决方案1】:

“文件”可能类似于符号链接。文件和文件符号链接之间的区别是否重要取决于您的应用程序。


使用布尔值来表示“是某物或某物”是个坏主意,因为不清楚“真”或“假”是什么意思。

即使你记得“真”的意思是“是一个目录”,“假”在逻辑上意味着“不是一个目录”......所以读者会想“好吧,我知道它不是一个目录,但是是什么?”

而你提出的问题正是证明了这一点。

考虑改用枚举:

enum Kind { DIRECTORY, FILE }

这不仅是自记录的(您的代码会说“如果这是一个文件/否则如果这是一个目录”),它还保留了将来添加其他类型的可能性。

【讨论】:

  • 感谢您花时间解释。你也可以写示例代码吗?我以前从未玩过枚举。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-27
  • 2016-03-01
  • 2015-06-06
  • 1970-01-01
  • 1970-01-01
  • 2019-03-16
相关资源
最近更新 更多