将URL转换为AbsolutePath

nit*_*ite 16 java url file-io

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

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

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

程序找不到该文件.我知道我可以转换的所有空间的路径都包含'%20',但我真正的问题是我使用的是日语操作系统,当程序jar文件在日文文本的目录中时(例如デスクトップ)我得到的URL - 对目录名称进行编码,如下所示:

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

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

NT

Noe*_*Ang 40

URL url=getClass().getResource("/getresources/test.txt");
File f=new File(url.toURI());
Run Code Online (Sandbox Code Playgroud)

  • 得到一个例外"URI不是分层的" (2认同)

Min*_*ang 11

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

Path p = Paths.get(url.toURI());
Run Code Online (Sandbox Code Playgroud)


Mor*_*itz 8

Filejava.net.URI在这种情况下,有一个构造函数接受类型的参数:

File f = new File(url.toURI());
Run Code Online (Sandbox Code Playgroud)

  • 我得到的错误是:java.lang.IllegalArgumentException:URI不是分层的 (4认同)
  • 可能是您将应用程序与`.jar` 文件中的资源捆绑在一起吗?你不能从那个 `URI` 创建一个 `File` 对象,因为资源不是一个文件,而是那个 `.jar` 中的一个条目。 (2认同)
  • 不能。您必须通过调用InputStream通过调用InputStream来读取资源,方法是调用url.openStream()或直接通过getClass()。getResourceAsStream(“ resource.txt”)。如果您需要知道.jar在磁盘上的哪个位置,则可以检查返回的URL,但不能在该.jar中创建引用资源的文件。 (2认同)

GOT*_*O 0 6

对于使用 Java 11 或更高版本的用户来说,还有另一个选择:

Path path = Path.of(url.toURI());
Run Code Online (Sandbox Code Playgroud)

或作为字符串:

String path = Path.of(url.toURI()).toString();
Run Code Online (Sandbox Code Playgroud)

URISyntaxException如果保证 URL 是文件 URL,上面的两种方法都会抛出一个可以安全忽略的异常。