Java.io.file构造函数用于处理UNC文件路径

时间:2016-08-03 06:47:16

标签: java jar unc

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

例如,我尝试

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结尾的字符串。

new File()是否有办法获取File的路径名,即ff,如file:\\dir1\dir2\file.jar!MyClass

2 个答案:

答案 0 :(得分:0)

由于你的输入目录字符串是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.


另一种更好的方法是使用Path:

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

答案 1 :(得分:0)

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