Передать локальный файл в URL в Java


175

Как мне создать новый URLобъект, используя локальный файл, для целей юнит-тестов?

Ответы:


283
new File(path).toURI().toURL();

22
Для Java 7+: Paths.get ("путь", "к", "материал"). ToUri (). ToURL ()
Ajax

46

Используя Java 7:

Paths.get(string).toUri().toURL();

Тем не менее, вы, вероятно, хотите получить URI. Например, a URIначинается с file:///URL-адреса file:/(по крайней мере, это то, что toStringпроизводит).


«... URI начинается с file: ///, а URL с file: / ...». Это как для Windows, так и для Linux?
ptntialunrlsd

@ptntialunrlsd Это хороший вопрос. Я не проверял, но я бы предположил, да.
Александр Дубинский

7
Нет. URL - это особый случай URI. URI файла начинается с «file: //», а затем перечисляет хост (как правило, опускается), за которым следуют «/» и путь «foo / bar» (обычно подразумеваемый как абсолютный путь). Таким образом "file: /// foo / var". URI, который выглядит как «file: / foo / bar», неверен. Смотрите также: файл URI схемы
Дэвид Тонхофер

@DavidTonhofer Спасибо за объяснение URI, но это не отвечает на вопрос ptntialunrlsd . Что '... toURL (). ToString ()' производит в Linux? Кроме того, я отменил ваши правки, потому что они сделали мой ответ более многословным, не меняя смысла.
Александр Дубинский

3
@AleksandrDubinsky Лучше всего оставить указатели на Javadoc для Oracle, хотя ... проще переходить по ним java.nio.file.Paths. Кроме того, убедитесь, что вы имеете в виду реализации в «URI против URL». Anway java.net.URL.toString()производит то же самое в Unix, как и должно. Он отображает только одну "/", что очень неправильно (см. Схему URI файла ). Я думаю, что это на Java по причинам, лучше использовать java.net.URI. Он правильно генерирует «file: // [host] /» при вызове .toString().
Дэвид Тонхофер


21
new URL("file:///your/file/here")

1
где /your/file/hereабсолютный путь к файлу в Unix / Linux. На Windows это было бы иначе, я думаю.
Робин Грин

5
Это не очень умно, так как вам приходится самостоятельно обрабатывать экранирование символов, которые не допускаются в URL. В Windows (и, возможно, в других операционных системах) вы также должны изменить разделитель пути от собственного пути к файлу.
jarnbjo

new URL("file:my.properties");
Weberjn

Хотя это правильно, оно не переносимо, поскольку зависит от абсолютных путей.
мазунки


5

посмотрите здесь полный синтаксис: http://en.wikipedia.org/wiki/File_URI_scheme для unix-подобных систем, как будет сказано @Alex, file:///your/file/hereтогда как для систем Windowsfile:///c|/path/to/file


7
Не делай этого вручную. File.toURI().toURL()путь
Шон Патрик Флойд

3
@SeanPatrickFloyd иногда у вас нет выбора, например, когда он находится в .propertiesфайле.
Сани

@ArtB Я не вижу, как это меняет дело
Шон Патрик Флойд

2
@SeanPatrickFloyd, этот вопрос / ответ возникает при поиске java file url, что в моем случае означает, что я искал формат file://URL, в Java, для использования в .propertiesфайле или для ввода вручную и т. Д.
daveloyall

1
@SeanPatrickFloyd иногда у вас нет доступа к исходному коду, только к свойству, и file://, к сожалению, это необходимо. Быть зависимым от системы - не такая большая проблема, так как это изменчивое свойство.
Викингстеве

4

Вы также можете использовать

[AnyClass].class.getResource(filePath)

2
но только если этот файл существует в classpath
aepurniet

1
Если «filePath» может быть найден в банке, результирующий URL-адрес выглядит так jar:file:/home/user/a/b/c/foo.jar!/com/example/stuff/config.txt.
Дэвид Тонхофер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.