当我尝试在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
。
答案 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:
部分并在实际文件名中为每一个使用两个反斜杠,以满足编译器的转义规则。或者使用正确数量的正斜杠。