Passe um arquivo local para o URL em Java

175

Como crio um novo URLobjeto usando um arquivo local, para fins de testes de unidade?

EntretantoInHell
fonte

Respostas:

283
new File(path).toURI().toURL();
jarnbjo
fonte
21
Para java 7+: Paths.get ("path", "to", "stuff"). ToUri (). ToURL ()
Ajax
46

Usando o Java 7:

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

No entanto, você provavelmente deseja obter um URI. Por exemplo, a URIcomeça com file:///mas um URL com file:/(pelo menos, é o que toStringproduz).

Aleksandr Dubinsky
fonte
"... um URI começa com o arquivo: /// mas uma URL com o arquivo: / ..." Esse é o caso do Windows e do Linux?
ptntialunrlsd
@ptntialunrlsd Essa é uma boa pergunta. Eu não verifiquei, mas acho que sim.
Aleksandr Dubinsky
7
Não. Um URL é apenas um caso especial de um URI. Um URI de arquivo começa com "file: //" e lista o host (geralmente omitido), seguido por "/" e o caminho "foo / bar" (geralmente destinado a ser lido como um caminho absoluto). Assim, "file: /// foo / var". Um URI que se parece com "file: / foo / bar" está incorreto. Veja também: esquema de URI de arquivo
David Tonhofer 2/15/15
@DavidTonhofer Obrigado pela explicação dos URIs, mas isso não responde à pergunta de ptntialunrlsd . O que '... toURL (). ToString ()' produz no Linux? Além disso, reverti suas edições porque elas tornaram minha resposta mais prolífica sem alterar o significado.
Aleksandr Dubinsky
3
@AleksandrDubinsky É melhor deixar os ponteiros para o javadoc do Oracle, no entanto .. mais fácil clicar para java.nio.file.Paths. Além disso, certifique-se de deixar claro que você quer dizer as implementações em "URI vs URL". Anway java.net.URL.toString()produz a mesma coisa no Unix, como deve. Ele exibe apenas um "/" muito errado (consulte o esquema de URI do arquivo ). Eu acho que isso é em Java por razões, melhor uso java.net.URI. Ele gera corretamente "file: // [host] /" em uma chamada para .toString().
David Tonhofer 5/09/2015
40
new File("path_to_file").toURI().toURL();
Ted Hopp
fonte
21
new URL("file:///your/file/here")
Alex
fonte
1
onde /your/file/hereé um caminho absoluto para um arquivo no Unix / Linux. No Windows, seria diferente, eu acho.
Robin Green
5
Isso não é muito inteligente, pois você precisa lidar com a fuga de caracteres que não são permitidos nos URLs. No Windows (e potencialmente em outros sistemas operacionais), você também precisa modificar o separador de caminho do caminho nativo para o arquivo.
23411 jarnbjo
new URL("file:my.properties");
Weberjn #
Enquanto isso estiver correto, não é portátil, pois depende de caminhos absolutos.
mazunki
10
File myFile=new File("/tmp/myfile");
URL myUrl = myFile.toURI().toURL();
Sean Patrick Floyd
fonte
5

veja aqui a sintaxe completa: http://en.wikipedia.org/wiki/File_URI_scheme para sistemas unix, será como o @Alex disse, file:///your/file/hereenquanto que para sistemas Windows seriafile:///c|/path/to/file

Liv
fonte
7
Não faça isso manualmente. File.toURI().toURL()é o caminho a percorrer
Sean Patrick Floyd
3
@SeanPatrickFloyd às vezes você não tem escolha, como quando está em um .propertiesarquivo.
Trenó
@ArtB Não vejo como isso faz diferença #
Sean Patrick Floyd
2
@SeanPatrickFloyd, esta pergunta / resposta aparece quando você pesquisa java file url, o que, no meu caso, significa que eu estava pesquisando o formato de uma file://URL, em Java, para uso em um .propertiesarquivo ou para digitar manualmente etc.
daveloyall
1
@SeanPatrickFloyd às vezes você não tem acesso ao código fonte, apenas à propriedade, e file://infelizmente é necessário. Ser dependente do sistema não é um problema tão grande, pois é uma propriedade mutável.
vikingsteve
4

Você também pode usar

[AnyClass].class.getResource(filePath)
xMichal
fonte
2
mas somente se esse arquivo existir no caminho de classe
aepurniet
1
Se o "filePath" puder ser encontrado em um jar, a URL resultante será semelhante jar:file:/home/user/a/b/c/foo.jar!/com/example/stuff/config.txt.
David Tonhofer 02/09/2015