2016-08-03 69 views
-1

当我尝试在UNC路径中使用JAR文件时,发现遇到了问题。 java.io.file的构造函数将始终将UNC文件路径转换为本地路径。处理UNC文件路径的Java.io.file构造函数

例如,我尝试

String dirStr = "file:\\\\dir1\dir2\file.jar!Myclass"; 
File ff = new File(dirStr); 
System.out.println(ff.toString()); 

我会得到输出如下:file:\dir1\dir2\file.jar!Myclass。但我期望得到的是file:\\dir1\dir2\file.jar!MyClass

我试图在dirStr中添加更多斜杠,但它无法工作。因为在java.io.file中,它会调用方法来删除重复的斜线。我试图用URI创建ff。但输出将是\dir1\dir2\file.jar!Myclass,不能用于成功使用JAR文件。我认为JAR的格式必须以file:协议开始,以便使用上面的字符串\dir1\dir2\file.jar!Myclass解析以!结尾的字符串。

有什么办法可以​​得到File的路径名,即ff,就像file:\\dir1\dir2\file.jar!MyClass一样。

+0

我认为'file:'前缀通常用于本地路径。 UNC路径不是本地路径。尝试不使用'file:'前缀,即'\\ dir1 \ dir2 \ file.jar!MyClass'。你也可以尝试使用正斜杠,'//dir1/dir2/file.jar!MyClass' – janos

+0

为什么你认为你必须提供一个URL到'File'构造函数?你不能,也不必。不清楚你真的在这里问什么。 – EJP

+0

因为我需要在UNC路径中使用JAR文件。当您的java CLASSPATH包含远程UNC路径时,您将遇到此问题。它会像'dirStr'一样解析JAR文件。 –

回答

0

由于您的输入dir字符串是UNC类型,我认为您应该使用Java的URI
示例代码:

URI uri = new URI(dirStr); 
System.out.println(uri.toString()); // If you want to get the path as URI 
File ff = new File(uri.getPath()); // If you want to access the file. 


其他更好的办法是使用路径:

URI uri = new URI(dirStr); 
Path path = Paths.get(uri); // Or directly Path path = Paths.get(dirStr); 
File ff = path.toFile(); // << your file here 
path.toUri(); // << your uri path here 
+0

我已经试过这段代码,'ff'就会像'\\ dir1 \ dir2 \ file.jar!MyClass'没有'file:'一样。 –

+0

所以你只需要'uri.toString()'。 – Minh

+0

我编辑了示例代码,请检查它。 – Minh

0

构造File(String)需要一个路径,而不是URL。删除file:部分,并为实际文件名中的每一个使用两个反斜杠,以满足编译器的转义规则。或者使用正确数量的正斜杠。

+0

事实上,我没有使用URL,而是使用URI。 –

+0

如果我删除'file:',它将无法找到JAR文件。我想这是因为字符串“.jar”后面有一个'!'。 –

+0

如果你必须有'file:'你不应该使用'File'。正如我已经说过的那样,两人不会在一起。 – EJP