Question

J'ai créé une application Java pour "Debian Linux". Maintenant, je veux que cette application lit un fichier placé dans le répertoire où le fichier JAR de cette application est spécifié. Alors, que spécifier à l'argument de l'objet de fichier?

File fileToBeReaded = new File(...);

Que spécifier comme argument pour l'instruction ci-dessus afin de spécifier un relevoire relatif représentant le chemin où le fichier JAR de la demande a été placé?

Était-ce utile?

La solution

Si vous connaissez le nom du fichier, bien sûr, c'est simplement

new File("./myFileName")

Si vous ne connaissez pas le nom, vous pouvez utiliser la méthode List () de l'objet de fichier pour obtenir une liste de fichiers dans le répertoire actuel, puis choisir celui que vous souhaitez.

Autres conseils

En utilisant des chemins relatifs dans java.io.File dépend entièrement du répertoire de travail actuel. Cela diffère par la façon dont vous exécutez le pot. Si vous êtes par exemple dans /foo Et vous exécutez le pot par java -jar /bar/jar/Bar.jar Ensuite, le répertoire de travail est toujours /foo. Mais si tu cd à /bar/jar et exécuter java -jar Bar.jar Ensuite, le répertoire de travail est /bar/jar.

Si vous voulez le chemin racinaire où se trouve le pot, l'un des moyens serait:

File root = new File(Thread.currentThread().getContextClassLoader().getResource("").toURI());

Cela renvoie le chemin racine du fichier jar (dans la racine de ClassPath). Si vous placez votre ressource par rapport à la racine du chemin de classe, vous pouvez y accéder comme suit:

File resource = new File(root, "filename.ext");

Alternativement, vous pouvez également utiliser:

File resource = new File(Thread.currentThread().getContextClassLoader().getResource("filename.ext").toURI());

Je pense que cela devrait faire l'affaire:

File starting = new File(System.getProperty("user.dir"));
File fileToBeRead = new File(starting,"my_file.txt");

De cette façon, le fichier sera recherché dans le user.dir propriété, qui sera le répertoire de travail de votre application.

Demandez-vous des problèmes de personnage d'échappement?

Si tel est le cas, utilisez des barres obliques en avant au lieu de barreaux vers l'arrière comme

"C: /users/you/desktop/test.txt"

à la place de

"C: Users vous Desktop test.txt"

Vous pourriez demander à votre Classloader de vous donner l'emplacement du pot:

getClass().getProtectionDomain().getCodeSource().getLocation().getPath();

... mais je suggérerais de mettre le fichier que vous recherchez dans votre fichier JAR et de le lire comme une ressource (getClass().getResourceAsStream( "myFile.txt" )).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top