Подтвердить что ты не робот

Java: как получить файл из экранированного URL?

Я получаю URL-адрес, который находит локальный файл (тот факт, что я получаю URL-адрес, не входит в мой контроль). URL-адрес экранирован правильно, как определено в RFC2396. Как я могу преобразовать это в объект Java файла?

Как ни странно, метод getFile() URL возвращает строку, а не файл.

Я создал каталог под названием "/tmp/some dir" (с символом расстояния между "some" и "dir" ), который правильно расположен по следующему URL-адресу: "file:///tmp/some %20dir" (цитаты добавлены для ясности).

Как преобразовать этот URL в файл Java?

Чтобы подробнее рассказать о моей проблеме, следующие отпечатки false:

URL url = new URL( "file:///tmp/some%20dir" );
File f = new File( url.getFile() );
System.out.println( "Does dir exist? " + f.exists() );

В то время как следующее (вручную заменяющее "%20" пробелом) печатает true:

URL url = new URL( "file:///tmp/some%20dir" );
File f = new File( url.getFile().replaceAll( "%20", " " ) );
System.out.println( "Does dir exist? " + f.exists() );

Обратите внимание, что я не спрашиваю, почему первый пример печатает false, и почему второй пример с использованием моего hacky replaceAll печатает true, я спрашиваю, как преобразовать экранированный URL-адрес в объект Java файла.

EDIT: спасибо всем, это был почти обман, но не совсем.

Глупо, я искал вспомогательный метод внутри самого класса URL.

Следующее работает как ожидается, чтобы получить Java файл с URL-адреса Java:

URL url = new URL( "file:///home/nonet/some%20dir" );
File f = new File( URLDecoder.decode( url.getFile(), "UTF-8" ) );
4b9b3361