java - new - scala创建文件夹




Java中有没有办法确定路径是否有效而不尝试创建文件? (4)

我需要确定用户提供的String是否是有效的文件路径(即,如果createNewFile()将成功或抛出异常)但我不想使用仅为验证目的而创建的无用文件来膨胀文件系统,因此,有没有办法确定我拥有的字符串是否是一个有效的文件路径而不试图创建该文件?

我知道“有效文件路径”的定义因操作系统而异,但我想知道是否有任何快速接受“C:/ foo”或“/ foo”并拒绝“香蕉”的方式...一种可能的方法如果创建成功,可能正在尝试创建文件并最终删除它,但我希望有一种更优雅的方式来实现相同的结果......


Java 7中引入的Path类添加了新的替代方案,如下所示:
(在Linux无法正常工作 - 总是返回true)

/**
 * <pre>
 * Checks if a string is a valid path.
 * Null safe.
 *  
 * Calling examples:
 *    isValidPath("c:/test");      //returns true
 *    isValidPath("c:/te:t");      //returns false
 *    isValidPath("c:/te?t");      //returns false
 *    isValidPath("c/te*t");       //returns false
 *    isValidPath("good.txt");     //returns true
 *    isValidPath("not|good.txt"); //returns false
 *    isValidPath("not:good.txt"); //returns false
 * </pre>
 */
public static boolean isValidPath(String path) {
    try {
        Paths.get(path);
    } catch (InvalidPathException | NullPointerException ex) {
        return false;
    }
    return true;
}

File.getCanonicalPath()对此非常有用。 在解析操作系统或文件系统时,会针对某些类型的无效文件名(例如,Windows中的CONPRN*?* )抛出IO异常。 但是,这仅作为初步检查; 在实际创建文件时,您仍需要处理其他故障(例如权限不足,驱动器空间不足,安全限制)。


这也将检查目录的存在性。

File file = new File("c:\\cygwin\\cygwin.bat");
if (!file.isDirectory())
   file = file.getParentFile();
if (file.exists()){
    ...
}

如果您有权写入目录,似乎file.canWrite()不会给您一个明确的指示。


boolean canWrite(File file) {
  if (file.exists()) {
    return file.canWrite();
  }
  else {
    try {
      file.createNewFile();
      file.delete();
      return true;
    }
    catch (Exception e) {
      return false;
    }
  }
}




filesystems