将URL转换为AbsolutePath

时间:2010-09-02 22:01:53

标签: java url file-io

有没有简单的方法将包含双字节字符的URL转换为绝对路径?

我问的原因是我想找到这样的资源:

URL url=getClass().getResources("/getresources/test.txt");
String path=url.toString();
File f=new File(path);

程序找不到该文件。我知道我可以转换的所有空间的路径都包含'%20',但我真正的问题是我使用的是日语操作系统,当程序jar文件在日文文本的目录中时(例如デスクトップ)我得到{ {3}}目录名称, 像这样:

%E3%83%87%E3%82%B9%E3%82%AF%E3%83%88%E3%83%83%E3%83%97

我想我可以获得UTF-8字节代码并将其转换为正确的字符来查找文件,但我想知道是否有更简单的方法来执行此操作。任何帮助将不胜感激。

NT

4 个答案:

答案 0 :(得分:34)

URL url=getClass().getResource("/getresources/test.txt");
File f=new File(url.toURI());

答案 1 :(得分:5)

File有一个构造函数为这种情况采用java.net.URI类型的参数:

File f = new File(url.toURI());

答案 2 :(得分:2)

如果您有兴趣从URL获取Path,则可以执行以下操作:

Path p = Paths.get(url.toURI());

答案 3 :(得分:0)

适用于 Java 11 或更高版本的用户的另一种选择:

Path path = Path.of(url.toURI());

或作为字符串:

String path = Path.of(url.toURI()).toString();

如果 URL 保证是文件 URL,则上述两种方法都会抛出一个 URISyntaxException,可以安全地忽略该 apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: my spec: hosts: - "*" gateways: - my-gateway http: - match: - uri: prefix: /zzz rewrite: uri: /products route: - destination: port: number: 443 # here host: my-site.example.com