FileInputStream ne fonctionne pas avec le chemin relatif

J’ai essayé de créer un object à partir de FileInputStream et de transmettre la valeur relative d’un fichier à son constructeur, mais cela ne fonctionnait pas correctement et FileNotFoundException lancé une FileNotFoundException

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

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

Essayez de supprimer le / , 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 vérifier que le programme est bien exécuté en vérifiant le répertoire actuel :

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

Les autres affiches ont raison, le chemin que vous donnez n’est pas relatif. Vous pouvez potentiellement faire quelque chose comme this.getClass().getResourceAsStream("Path relative to the current class") . Cela vous permettrait de charger un fichier en tant que stream basé sur un chemin 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.Ssortingng)

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

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

Windows ne supporte pas le symbole / tant que “root”

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

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

ou

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