7
votes

Comment spécifier FilePath en Java?

J'ai créé une application Java pour "Debian Linux". Je souhaite maintenant que cette application lit un fichier placé dans le répertoire dans lequel le fichier JAR de cette application est spécifié. Alors, que spécifier à l'argument de l'objet de fichier? XXX

Quoi de spécifier comme argument pour la déclaration ci-dessus pour spécifier le fichier de fichier relatif représentant le chemin où le fichier JAR de l'application a été placé?


2 commentaires

Le titre devrait peut-être être "Comment trouver où mon programme est installé en Java?"


Exactement, c'est ce que j'ai voulu. Thx pour le bowvote


6 Réponses :


3
votes

Je pense que cela devrait faire le truc: xxx

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


0 commentaires

8
votes

Si vous connaissez le nom du fichier, il s'agit simplement de xxx

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


0 commentaires

2
votes

Vous pouvez demander à votre chargeur de classe de vous donner l'emplacement du pot: xxx

... mais je suggère de mettre le fichier que vous recherchez dans votre fichier JAR et de lire comme une ressource ( getclass (). getresourceastream ("myfile.txt") ).


1 commentaires

La ressource ne doit pas nécessairement être dans le fichier JAR - vous pouvez également ajouter des annuaires au path de classe.



5
votes

Utilisation des chemins relatifs dans java.io.file code> dépend entièrement du répertoire de travail actuel. Cela diffère avec la façon dont vous exécutez le pot. Si vous êtes par exemple dans / foo code> et que vous exécutez le pot par java -jar /bar/jar/bar.jar code> alors le répertoire de travail est toujours / foo code>. Mais si vous cd code> à / bar / jar code> et exécutez java -jar bar.jar code> alors le répertoire de travail est / Bar / Jar code>.

Si vous voulez le chemin racine où se trouve le bocal, l'une des manières serait la suivante: p> xxx pré>

Ceci renvoie le chemin racine du fichier JAR (IOW The ClassPath racine). Si vous placez votre ressource par rapport à la racine de classePath, vous pouvez y accéder comme suit: P>

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


6 commentaires

Pouvez-vous s'il vous plaît suggérer avec le .war plutôt que le pot. Je trouve la difficulté d'obtenir le chemin de fichier d'un fichier image lorsque l'application est déployée sur un serveur JBoss. J'ai soulevé séparément une question pour cela - Stackoverflow.com/questions/54161215/...


Hey @shirgill :) Selon le type de serveur, le déploiement de la guerre charge généralement des fichiers individuels en mémoire non pas dans le disque. Par conséquent, java.io.file faisant référence à un fichier emballé par la guerre ne fonctionnera pas toujours. Avant de donner une réponse, vous feriez mieux de dire ce que vous avez besoin exactement de ce fichier pour et pourquoi introuvable n'est pas suffisant. Par exemple. Peut-être avez-vous besoin de cela pour une API tierce partie qui accepte obstinément uniquement le fichier et non introuvream , tel que ITEXT PDF.


Oui, lors de la construction du fichier PDF, j'ai besoin de créer un objet d'image logo = image.getinstance (chemin) exposé par ITEXT PDF. Je vois qu'il y a une méthode surchargée qui prend dans un objet InputStream . Mais d'autres exigences sont liées à charger un fichier de polices (arabe) basefont basenormalfont = basefont.createfont (chemin, basefont.entity_h, true); Je dois donner le chemin du même fichier. Pour le moment, j'ai mis le fichier dans un dossier de configuration distinct sous Linux, puis a donné le chemin comme System.geproperty ("..... cheminement du dossier Conf") + autre chemin d'accès au fichier de polices .


L'approche ci-dessus fonctionne bien mais est la même non réalisable si le fichier fait partie du projet Maven. Veuillez suggérer. BTW, comment êtes-vous arrivé spécifiquement à IText. Je vois que je ne l'ai pas mentionné nulle part: :))


@Shirgill: parce que cela a été posé avant :) Stackoverflow.com/q/32251711 Votre réponse est également là et probablement l'option 4 est le mieux pour vous.


C'est incroyablement informatif. Merci pour votre générosité.



7
votes

Vous demandez-vous des problèmes de caractère d'échappement?

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

"C: /USERSERS/YOU/DESKTOP/TEST.TXT"

au lieu de

"C: \ utilisateurs \ You \ Desktop \ test.txt"


0 commentaires

1
votes

sur Intellijidea Cliquez avec le bouton droit de la souris sur le fichier, puis copiez le chemin Absolute, puis dans la double citation Coller le chemin comme FilePath. Par exemple, il devrait s'agir de quelque chose comme ceci: xxx


1 commentaires

Cela a fini par être ce dont j'avais besoin en C # Sikuli4net