Я получаю 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" ) );