【发布时间】:2015-07-08 10:35:18
【问题描述】:
我有一个由我们公司的多人运行的 Eclipse RCP 产品。所有 PC 都运行某些版本的 Windows。我们可以访问共享的 PC,不同的人已将其映射到不同的驱动器号。这意味着同一文件可能会以多种不同的方式被引用,具体取决于运行程序的 PC。例如
- \communalPC\Shared\foo.txt
- Y:\Shared\foo.txt
- Z:\Shared\foo.txt
我想以编程方式检查公用 PC 上是否有任意文件。在java中是否有一种强大的方法来做到这一点?
下面我们当前的解决方案有点破解它不可靠,因为人们映射到不同的驱动器号、更改驱动器号、不可移植等。
private static boolean isOnCommunalPc(File file) {
if(file.getAbsolutePath().toLowerCase().startsWith("\\\\communalPC")) {
return true;
}
if(file.getAbsolutePath().toLowerCase().startsWith("y:")){
return true;
}
if(file.getAbsolutePath().toLowerCase().startsWith("z:")){
return true;
}
return false;
}
【问题讨论】:
-
从您的代码示例看来,该文件始终位于公用 PC 上?
-
谢谢,这是一个错字。我将最后一个 return 语句从 true 更改为 false。
-
获取绝对路径是一个好的开始。在 Windows 上,可以结合运行外部脚本来确定驱动器的映射路径。在 cmd.exe 中,“net use”命令在网络级别打印所有网络驱动器路径的映射。如果您从绝对路径获取的驱动器不在“网络使用”列表中,那么它必须在本地主机上,并且应该与在 Windows 中从外部脚本运行“echo %cd%”所给出的相同。
-
对于我们的情况来说,使用“net use”是一个好主意,因为我们只在 Windows 上运行,它绕过了硬编码驱动器号。我认为这解决了我最紧迫的问题。谢谢!