Comment spécifier Filepath en Java?
-
18-09-2019 - |
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é?
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" )
).