Я получаю URL, который определяет местоположение локального файла (то, что я получаю URL, не находится в моем управлении). URL оставляют законно, как определено в RFC2396. Как я могу преобразовать это к объекту Файла Java?
Странно достаточно URL getFile () метод возвращает Строку, не Файл.
Я создал каталог, названный "/tmp/some dir" (с символом интервала между "некоторыми" и "dir"), который правильно расположен следующим URL: "file:///tmp/some%20dir" (кавычки, добавленные для ясности).
Как я могу преобразовать тот URL в Файл Java?
Предоставлять больше подробную информацию о моей проблеме, следующей лжи печати:
URL url = new URL( "file:///tmp/some%20dir" );
File f = new File( url.getFile() );
System.out.println( "Does dir exist? " + f.exists() );
В то время как следующее (вручную заменяющий "%20" с пространством) верная печать:
URL url = new URL( "file:///tmp/some%20dir" );
File f = new File( url.getFile().replaceAll( "%20", " " ) );
System.out.println( "Does dir exist? " + f.exists() );
Обратите внимание, что я не спрашиваю, почему первый пример печатает ложь, ни почему второй пример с помощью моей верной печати hacky replaceAll, я спрашиваю, как преобразовать завершенный 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" ) );
URLDecoder.decode(url);//deprecated
URLDecoder.decode(url, "UTF-8"); //use this instead
См. соответствующий вопрос Как расшифровать URL-адреса в Java?
Файл
конструктор, принимающий URI
в сочетании с URL # TOUR ()
должен работать:
URL url = getItSomehow();
File file = new File(url.toURI());