web-dev-qa-db-fra.com

FileInputStream ne fonctionne pas avec le chemin d'accès relatif

J'ai essayé de créer un objet à partir de FileInputStream et de transmettre la valeur relative d'un fichier à son constructeur, mais cela ne fonctionne pas correctement et j'ai lancé un FileNotFoundException

try {
   InputStream is = new FileInputStream("/files/somefile.txt");
} catch (FileNotFoundException ex) {
   System.out.println("File not found !");
}
14
Mahmoud Elshamy

Le / au début rendra le chemin absolu au lieu de relatif.

Essayez de supprimer le premier /, remplacez donc:

InputStream is = new FileInputStream("/files/somefile.txt");

avec:

InputStream is = new FileInputStream("files/somefile.txt");

Si vous rencontrez toujours des problèmes, essayez de vous assurer que le programme s'exécute d'où vous le pensez en en vérifiant le répertoire courant :

System.out.println(System.getProperty("user.dir"));
40
Dukeling

Les autres affiches ont raison, le chemin que vous donnez n'est pas un chemin relatif. Vous pourriez potentiellement faire quelque chose comme this.getClass().getResourceAsStream("Path relative to the current class"). Cela vous permettrait de charger un fichier en tant que flux en fonction d'un chemin d'accès relatif à la classe à partir de laquelle vous l'appelez.

Voir l'API Java pour plus de détails: http://docs.Oracle.com/javase/7/docs/api/Java/lang/Class.html#getResourceAsStream (Java .lang.String)

5
Michael
  1. ce n'est pas un chemin relatif, c'est un chemin absolu.
  2. Si vous êtes sous Windows, vous devez ajouter votre lettre de lecteur avant votre chemin:

InputStream is = new FileInputStream("C:/files/somefile.txt");

windows ne prend pas en charge le / symbole comme "racine"

Si vous voulez charger un fichier que vous mettrez dans votre JAR, vous devez utiliser

getClass().getResource("path to your file");

ou

getClass().getResourceAsStream("path to your file");
2
BackSlash