web-dev-qa-db-fra.com

Obtenir le fichier du dossier du projet java

Je veux obtenir un fichier du dossier du projet en utilisant "Classe de fichier", comment puis-je faire cela?

File file=new File("x1.txt");
21
Saad Ahmad

Eh bien, il existe de nombreuses façons d’obtenir un fichier en Java, mais c’est le général Gist.

N'oubliez pas que vous devrez au minimum envelopper cela dans une try {} catch (Exception e){}, car File fait partie de Java.io, ce qui signifie qu'il doit avoir un bloc try-catch.

Ne vous posez pas la question d'Ericson, mais si vous utilisez des packages réels, vous aurez des problèmes d'emplacement des fichiers, sauf si vous utilisez explicitement son emplacement. Le chemin relatif est dérangé par les packages.

c'est à dire,

src/
    main.Java
    x.txt

Dans cet exemple, l'utilisation de File f = new File("x.txt"); à l'intérieur de main.Java lève une exception file-not-found.

Cependant, utiliser File f = new File("src/x.txt"); fonctionnera.

J'espère que cela pourra aider!

21
Singular1ty

Cela semble que le fichier est intégré à votre application.

Vous devriez utiliser getClass().getResource("/path/to/your/resource.txt"), qui renvoie URL ou getClass().getResourceAsStream("/path/to/your/resource.txt");

S'il ne s'agit pas d'une ressource incorporée, vous devez connaître le chemin relatif du contexte d'exécution de votre application à l'emplacement de votre fichier.

10
MadProgrammer

Si vous ne spécifiez aucun chemin et ne mettez que le fichier (comme vous l'avez fait), le répertoire par défaut est toujours celui de votre projet (il ne se trouve pas dans le dossier "src", mais dans le dossier de votre projet).

9
Ericson Willians

Si vous essayez de charger un fichier qui ne se trouve pas dans le même répertoire que votre classe Java, vous devez utiliser la structure de répertoires d'exécution plutôt que celle qui apparaît lors de la conception. 

Pour savoir quelle est la structure du répertoire d'exécution, consultez votre répertoire {répertoire racine du projet}/cible/classes. Ce répertoire est accessible via le "." URL.

Basé sur la réponse de user4284592, les éléments suivants ont fonctionné pour moi:

ClassLoader cl = getClass().getClassLoader();
File file = new File(cl.getResource("./docs/doc.pdf").getFile());

avec la structure de répertoire suivante:

{root dir}/target/classes/docs/doc.pdf

J'espère que cela aidera tous ceux qui ont du mal à comprendre la logique des URL.

5
Chris Neve

Ces lignes ont fonctionné dans mon cas,

ClassLoader classLoader = getClass().getClassLoader();
File fi = new File(classLoader.getResource("test.txt").getFile());

fichier test.txt fourni dans src

2
doketan

Étant donné un fichier application.yaml dans test/resources

ll src/test/resources/
total 6
drwxrwx--- 1 root vboxsf 4096 Oct  6 12:23 ./
drwxrwx--- 1 root vboxsf    0 Sep 29 17:05 ../
-rwxrwx--- 1 root vboxsf  142 Sep 22 23:59 application.properties*
-rwxrwx--- 1 root vboxsf   78 Oct  6 12:23 application.yaml*
-rwxrwx--- 1 root vboxsf    0 Sep 22 17:31 db.properties*
-rwxrwx--- 1 root vboxsf  618 Sep 22 23:54 log4j2.json*

Dans le contexte du test, je peux obtenir le fichier avec 

String file = getClass().getClassLoader().getResource("application.yaml").getPath(); 

qui pointe en fait sur le fichier dans test-classes

ll target/test-classes/
total 10
drwxrwx--- 1 root vboxsf 4096 Oct  6 18:49 ./
drwxrwx--- 1 root vboxsf 4096 Oct  6 18:32 ../
-rwxrwx--- 1 root vboxsf  142 Oct  6 17:35 application.properties*
-rwxrwx--- 1 root vboxsf   78 Oct  6 17:35 application.yaml*
drwxrwx--- 1 root vboxsf    0 Oct  6 18:50 com/
-rwxrwx--- 1 root vboxsf    0 Oct  6 17:35 db.properties*
-rwxrwx--- 1 root vboxsf  618 Oct  6 17:35 log4j2.json*
0
prayagupd

dans javaFx 8 

javafx.scene.image.Image img = new javafx.scene.image.Image("/myPic.jpg", true);

URL url = new URL(img.impl_getUrl());
0