Я получаю URL, который находит локальный файл (тот факт, что я получаю URL, не находится под моим контролем). URL корректно экранирован, как определено в RFC2396. Как я могу преобразовать это в объект Java File?
Как ни странно, метод URL getFile () возвращает строку, а не файл.
Я создал каталог с именем "/ 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, ни , почему , во втором примере, используя мои хаки replaceAll , печатает true, я спрашиваю как преобразовать экранированный URL в объект Java-файла.
РЕДАКТИРОВАТЬ : спасибо всем, это было почти обманом, но не совсем
Тупо я искал вспомогательный метод внутри самого класса URL.
Следующее работает, как и ожидалось, для получения Java-файла из URL-адреса Java:
URL url = new URL( "file:///home/nonet/some%20dir" );
File f = new File( URLDecoder.decode( url.getFile(), "UTF-8" ) );