Rai*_*baz 66 java filesystems validation
我需要确定一个用户提供的字符串是一个有效的文件路径(即如果createNewFile()将会成功还是抛出一个异常),但我不想臃肿只为验证目的创建的无用文件的文件系统,所以是有没有办法确定我拥有的字符串是否是一个有效的文件路径而不试图创建该文件?
我知道"有效文件路径"的定义因操作系统而异,但我想知道是否有任何快速接受"C:/ foo"或"/ foo"并拒绝"香蕉"的方法...一种可能的方法如果创建成功,可能正在尝试创建文件并最终删除它,但我希望有更优雅的方法来实现相同的结果......
c0d*_*der 33
在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;
}
Run Code Online (Sandbox Code Playgroud)
kro*_*old 31
这将检查目录的存在性.
File file = new File("c:\\cygwin\\cygwin.bat");
if (!file.isDirectory())
file = file.getParentFile();
if (file.exists()){
...
}
Run Code Online (Sandbox Code Playgroud)
如果您有权写入目录,似乎file.canWrite()不会给您一个明确的指示.
Zac*_*ena 17
File.getCanonicalPath()对此目的非常有用.IO抛出异常某些类型的无效文件名(例如CON,PRN,*?*在Windows中)针对OS或文件系统解析时.但是,这仅作为初步检查; 在实际创建文件时,您仍然需要处理其他故障(例如,权限不足,驱动器空间不足,安全限制).
cle*_*tus 15
尝试创建文件时可能会出现许多问题:
更重要的是,这些可以在您尝试和查询之间进行更改,以确定您是否可以以及何时可以实现.在多线程环境中,这是竞争条件的主要原因之一,并且可能是某些程序的真正漏洞.
基本上你只需要尝试创建它,看它是否有效.这是正确的方法.这就是为什么事情喜欢ConcurrentHashMap有一个putIfAbsent()这样的检查和INSERT是一个原子操作,不从比赛条件受到影响.完全相同的原则在这里发挥作用.
如果这只是某些诊断或安装过程的一部分,那就去做吧,看看它是否有效.但是,不能保证它会在以后工作.
基本上,如果程序无法编写相关文件,那么程序必须足够健壮才能优雅地存在.
| 归档时间: |
|
| 查看次数: |
82495 次 |
| 最近记录: |