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");
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!
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.
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).
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.
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
É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*
dans javaFx 8
javafx.scene.image.Image img = new javafx.scene.image.Image("/myPic.jpg", true);
URL url = new URL(img.impl_getUrl());