web-dev-qa-db-fra.com

Comment lire le fichier du chemin relatif dans le projet Java? Java.io.File ne peut pas trouver le chemin spécifié

J'ai un projet avec 2 packages: 

  1. tkorg.idrs.core.searchengines
  2. tkorg.idrs.core.searchengines

Dans package (2), j'ai un fichier texte ListStopWords.txt, dans package (1), j'ai une classe FileLoadder. Voici le code dans FileLoader:

File file = new File("properties\\files\\ListStopWords.txt");

Mais avoir cette erreur:

The system cannot find the path specified

Pouvez-vous donner une solution pour y remédier? Merci.

96
tiendv

Si c'est déjà dans le classpath, il suffit de l'obtenir à partir du classpath. Ne modifiez pas les chemins relatifs dans Java.io.File. Ils dépendent du répertoire de travail actuel sur lequel vous n’avez aucun contrôle depuis le code Java.

En supposant que ListStopWords.txt se trouve dans le même package que FileLoader class:

URL url = getClass().getResource("ListStopWords.txt");
File file = new File(url.getPath());

Ou si tout ce que vous recherchez est une InputStream:

InputStream input = getClass().getResourceAsStream("ListStopWords.txt");

Si le fichier est - comme le nom du paquet l'indique - est réellement un fichier propriétés digne de ce nom (contenant __ lignes key=value) avec simplement la "mauvaise" extension, vous pouvez alors l'alimenter immédiatement avec le load() méthode.

Properties properties = new Properties();
properties.load(getClass().getResourceAsStream("ListStopWords.txt"));

Remarque: lorsque vous essayez d'y accéder depuis le contexte static, utilisez FileLoader.class au lieu de getClass() dans les exemples ci-dessus. 

139
BalusC

La ligne suivante peut être utilisée si nous voulons spécifier le chemin relatif du fichier.

File file = new File("./properties/files/ListStopWords.txt");  
37
santhosh

Le chemin relatif fonctionne en Java en utilisant le fichier. opérateur.

  • . signifie le même dossier que le contexte en cours d'exécution.
  • .. signifie le dossier parent du contexte en cours d'exécution.

La question est donc de savoir comment connaître le chemin d'accès actuel de Java.

faire une petite expérience

   File directory = new File("./");
   System.out.println(directory.getAbsolutePath());

Observez le résultat, vous apprendrez à connaître le répertoire actuel dans lequel Java cherche. A partir de là, utilisez simplement l’opérateur ./ pour localiser votre fichier.

par exemple si la sortie est 

G:\Java8Ws\MyProject\content.

et votre fichier est présent dans le dossier MyProject simplement utiliser 

File resourceFile = new File("../myFile.txt");

J'espère que cela t'aides

19
Samrat
InputStream in = FileLoader.class.getResourceAsStream("<relative path from this class to the file to be read>");
try {
    BufferedReader reader = new BufferedReader(new InputStreamReader(in));
    String line = null;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
} catch (Exception e) {
    e.printStackTrace();
}
7

essayez .\properties\files\ListStopWords.txt

5
bUg.

Bien que la réponse fournie par BalusC fonctionne dans ce cas, elle est interrompue lorsque le chemin du fichier contient des espaces car, dans une URL, ceux-ci sont convertis en% 20, ce qui n’est pas un nom de fichier correct. Si vous construisez l'objet File à l'aide d'un URI plutôt que d'une chaîne, les espaces seront gérés correctement:

URL url = getClass().getResource("ListStopWords.txt");
File file = new File(url.toURI());
3
Mark Krijgsman

J'aurais pu commenter, mais j'ai moins de représentants pour ça ... La réponse de Samrat a fait le travail pour moi. Il est préférable de voir le chemin du répertoire en cours à travers le code suivant.

    File directory = new File("./");
    System.out.println(directory.getAbsolutePath());

Je l'ai simplement utilisée pour corriger un problème auquel j'étais confronté dans mon projet. Veillez à utiliser ./ pour revenir au répertoire parent du répertoire actuel.

    ./test/conf/appProperties/keystore 
1
Aditya Bhardwaj

Je voulais analyser 'command.json' dans src/main // js/Simulator.Java. Pour cela, j'ai copié le fichier json dans le dossier src et j'ai donné le chemin absolu comme ceci:

Object obj  = parser.parse(new FileReader("./src/command.json"));
0
sver