Передайте локальний файл у 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. Наприклад, а URIпочинається з file:///URL-адреси з file:/(принаймні, саме так toString).


"... URI починається з файлу: ///, але URL з файлом: / ..." Це так і для Windows, і для Linux?
ptntialunrlsd

@ptntialunrlsd Це гарне запитання. Я не перевірив, але я б здогадався, що так.
Олександр Дубінський

7
Ні. URL - це лише окремий випадок URI. URI файлу починається з "file: //", а потім перераховує хост (як правило, пропущений), а потім "/" та шлях "foo / bar" (як правило, мається на увазі абсолютний шлях). Таким чином "файл: /// foo / var". URI, схожий на "файл: / foo / bar", неправильний. Дивіться також: файл URI-файлу
Девід Тонхофер

@DavidTonhofer Дякую за пояснення URI, але це не відповідає на запитання ptntialunrlsd . Що означає "... toURL (). ToString ()" в Linux? Крім того, я змінив ваші зміни, оскільки вони зробили мою відповідь більш зрозумілою, не змінюючи значення.
Олександр Дубінський

3
@AleksandrDubinsky Краще залишити вказівники на Oracle javadoc, хоча .. простіше натиснути на java.nio.file.Paths. Крім того, не забудьте уточнити, що ви маєте на увазі реалізацію в "URI vs URL". Anway java.net.URL.toString()виробляє те саме, що і в Unix, як і повинно. Він відображає лише один "/", що дуже неправильно (див. Схему URI файлу ). Я думаю, що це на Java через причини, краще використовувати java.net.URI. Він правильно генерує "файл: // [хост] /" під час виклику до .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тоді як для систем Windows було бfile:///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://, на жаль, це необхідно. Бути залежним від системи - це не така велика проблема, оскільки це властивість, що змінюється.
vikingsteve

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.