Convert URL to AbsolutePath

Viewed 59829

Is there any easy way to convert a URL that contains to two-byte characters into an absolute path?

The reason I ask is I am trying to find resources like this:

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

The program can't find the file. I know the path contain '%20' for all spaces which I could convert but my real problem is I'm using a japanese OS and when the program jar file is in a directory with japanese text (for example デスクトップ) I get the URL-encoding of the directory name, like this:

%e3%83%87%e3%82%b9%e3%82%af%e3%83%88%e3%83%83%e3%83%97

I think I could get the UTF-8 byte codes and convert this into the proper characters to find the file, but I'm wondering if there is an easier way to do this. Any help would be greatly appreciated.

nt

4 Answers

If you were interested in getting Path from URL, you can do:

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

Another option for those who use Java 11 or later:

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

or as a string:

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

Both methods above throw a URISyntaxException that can be safely ignored if the URL is guaranteed to be a file URL.

Related