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?

Respostas:


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

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).


"... 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


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

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


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


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)

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.