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?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top