Como especificar o FilePath em Java?
-
18-09-2019 - |
Pergunta
Eu criei um aplicativo Java para "Debian Linux". Agora eu quero que esse aplicativo lê um arquivo colocado no diretório em que o arquivo JAR desse aplicativo é especificado. Então, o que especificar no argumento do objeto de arquivo?
File fileToBeReaded = new File(...);
O que especificar como argumento para a declaração acima para especificar o FilePath relativo, representando o caminho em que o arquivo JAR do aplicativo foi colocado?
Solução
Se você souber o nome do arquivo, é claro que é simplesmente
new File("./myFileName")
Se você não souber o nome, pode usar o método List () do objeto de arquivo para obter uma lista de arquivos no diretório atual e escolher o que você deseja.
Outras dicas
Usando caminhos relativos em java.io.File
é totalmente dependente do diretório de trabalho atual. Isso difere da maneira como você executa o frasco. Se você é, por exemplo, em /foo
E você executa o frasco por java -jar /bar/jar/Bar.jar
Então o diretório de trabalho ainda está /foo
. Mas se você cd
para /bar/jar
e executar java -jar Bar.jar
Então o diretório de trabalho é /bar/jar
.
Se você deseja o caminho raiz onde o frasco está localizado, uma das maneiras seriam:
File root = new File(Thread.currentThread().getContextClassLoader().getResource("").toURI());
Isso retorna o caminho raiz do arquivo JAR (Iow the ClassPath Root). Se você colocar seu recurso em relação à raiz da classe de classe, poderá acessá -lo da seguinte forma:
File resource = new File(root, "filename.ext");
Como alternativa, você também pode usar:
File resource = new File(Thread.currentThread().getContextClassLoader().getResource("filename.ext").toURI());
Eu acho que isso deve fazer o truque:
File starting = new File(System.getProperty("user.dir"));
File fileToBeRead = new File(starting,"my_file.txt");
Dessa forma, o arquivo será pesquisado no user.dir
propriedade, que será o diretório de trabalho do seu aplicativo.
Você está perguntando sobre os problemas de personagens de fuga?
Se for esse o caso, use barras para frente em vez de barras para trás como
"C: /users/you/desktop/test.txt"
ao invés de
"C: Usuários você desktop test.txt"
Você pode pedir ao seu carregador de classe para fornecer a localização do frasco:
getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
... mas eu sugiro colocar o arquivo que você está procurando dentro do seu arquivo jar e leia -o como um recurso (getClass().getResourceAsStream( "myFile.txt" )
).