【问题标题】:Check if a path represents a file or a folder检查路径是否代表文件或文件夹
【发布时间】:2012-09-28 15:04:42
【问题描述】:

我需要一个有效的方法来检查 String 是否代表文件或目录的路径。 Android 中的有效目录名称是什么?原来文件夹名可以包含'.'字符,那么系统如何判断是文件还是文件夹呢?

【问题讨论】:

  • “系统如何理解是否有文件或文件夹”:系统如何理解?它在文件系统的磁盘上,是其中之一。

标签: java android file path directory


【解决方案1】:

假设path 是你的String

File file = new File(path);

boolean exists =      file.exists();      // Check if the file exists
boolean isDirectory = file.isDirectory(); // Check if it's a directory
boolean isFile =      file.isFile();      // Check if it's a regular file

File Javadoc


或者您可以使用 NIO 类 Files 并检查如下内容:

Path file = new File(path).toPath();

boolean exists =      Files.exists(file);        // Check if the file exists
boolean isDirectory = Files.isDirectory(file);   // Check if it's a directory
boolean isFile =      Files.isRegularFile(file); // Check if it's a regular file

【讨论】:

  • 正如我在问题中提到的,我只有字符串,没有文件实例,我无法创建它们。
  • path 在我的示例中是String。为什么不能创建File 实例?请注意,这不会改变文件系统上的任何内容。
  • 这是一个具体的例子,我正在尝试使用以下路径创建一个文件:/mnt/sdcard/arc/root,对于 isDirectory(),它返回 false。这里有什么问题?
  • @Egor 很难说,因为我没有安卓设备。请注意,root 可能是一个文件。文件不一定有 .something 扩展名。
  • isDirectory() 方法仅在文件存在并且是目录时才返回 true。如果路径中给出的文件不存在,那么它也返回 false。因此,如果给定的路径不存在或存在但它不是目录,则 isDirectory() 将返回 false...希望对您有所帮助..
【解决方案2】:

使用 nio API 的清洁解决方案:

Files.isDirectory(path)
Files.isRegularFile(path)

【讨论】:

  • 如果您正在遍历目录列表,这是更好的答案。在这里,您使用静态类来运行这些检查,而不是每次都创建一个新的 File 对象。节省内存
  • 不回答提出的问题。 Files.isDirectory( ) 不接受字符串。
【解决方案3】:

请坚持使用 nio API 来执行这些检查

import java.nio.file.*;

static Boolean isDir(Path path) {
  if (path == null || !Files.exists(path)) return false;
  else return Files.isDirectory(path);
}

【讨论】:

  • 当问题要求 Java 代码时,为什么要在 Scala 中给出答案(见标签)?
  • @Baz 因为 Scala 与 Java 是协变的……开个玩笑 :-D 。我已经更新了答案。
  • 您可以创建临时目录,在那里创建目录和文件。然后使用上面的代码并断言。一方面使用常规文件/目录,否则使用一些未创建的项目的虚拟路径。
【解决方案4】:

如果文件系统中不存在,系统无法告诉您String 是代表file 还是directory。例如:

Path path = Paths.get("/some/path/to/dir");
System.out.println(Files.isDirectory(path)); // return false
System.out.println(Files.isRegularFile(path)); // return false

对于以下示例:

Path path = Paths.get("/some/path/to/dir/file.txt");
System.out.println(Files.isDirectory(path));  //return false
System.out.println(Files.isRegularFile(path));  // return false

所以我们看到在这两种情况下系统都返回 false。 java.io.Filejava.nio.file.Path 都是如此

【讨论】:

    【解决方案5】:
    String path = "Your_Path";
    File f = new File(path);
    
    if (f.isDirectory()){
    
    
    
      }else if(f.isFile()){
    
    
    
      }
    

    【讨论】:

      【解决方案6】:

      要以编程方式检查字符串是否代表路径或文件,您应该使用 API 方法,例如 isFile(), isDirectory().

      系统如何判断是文件还是文件夹?

      我猜,文件和文件夹条目保存在一个数据结构中,由文件系统管理。

      【讨论】:

        【解决方案7】:
        public static boolean isDirectory(String path) {
            return path !=null && new File(path).isDirectory();
        }
        

        直接回答问题。

        【讨论】:

          【解决方案8】:
             private static boolean isValidFolderPath(String path) {
              File file = new File(path);
              if (!file.exists()) {
                return file.mkdirs();
              }
              return true;
            }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-09-30
            • 2018-05-23
            • 1970-01-01
            • 1970-01-01
            • 2018-07-17
            • 2017-02-11
            • 1970-01-01
            相关资源
            最近更新 更多