web-dev-qa-db-fra.com

java.io.FileNotFoundException dans Eclipse

Code:

import Java.io.*;
import Java.util.Scanner;

public class Driver {

    private int colorStrength;
    private String color;

    public static void main(String[] args) throws IOException {

        String line, file = "strength.txt";

        File openFile = new File(file);
        Scanner inFile = new Scanner(openFile);

        while (inFile.hasNext()) {
            line = inFile.nextLine();
            System.out.println(line);
        }

        inFile.close();
    }
}

Ceci est une petite partie d'un programme que j'écris pour une classe (les deux attributs privés doivent encore être utilisés, je le sais), mais lorsque j'essaie de l'exécuter avec le fichier Strength.txt, je reçois les erreurs suivantes: 

Exception:

Exception in thread "main" Java.io.FileNotFoundException: strength.txt (The system cannot find the file specified)
at Java.io.FileInputStream.open(Native Method)
at Java.io.FileInputStream.<init>(Unknown Source)
at Java.util.Scanner.<init>(Unknown Source)
at Driver.main(Driver.Java:14)

Si quelqu'un avec Eclipse pouvait m'aider à comprendre cela, ce serait très apprécié! 

9
user2948723

Vous avez utilisé un chemin de fichier relative qui est relatif à l'exécution de votre projet.

Si vous souhaitez le faire de cette façon, placez simplement le fichier strength.txt dans le répertoire base de votre projet. Ainsi:

enter image description here

Vous pouvez également faire référence au chemin du fichier absolute sur votre système. Par exemple, utilisez:

Les fenêtres:

C:/dev/myproject/strength.txt

Mac/Unix:

/Users/username/dev/strength.txt

(ou quel que soit le chemin complet).

12
Justin Jasmann

Faire ceci 

System.out.println(openFile.getAbsolutePath());

Il vous montrera où la JVM s'attend à trouver le fichier et si c'est le dossier que vous attendez également. Placez le fichier en conséquence ou donnez l'emplacement exact.

3
spiderman

Utilisez-le pour voir quel chemin de fichier le système utilise pour atteindre le chemin relatif

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

Assurez-vous ensuite que le chemin relatif suit immédiatement ce chemin.

Vous pouvez également transformer cela en chaîne en faisant

String filePath = System.getProperty("user.dir");

et ensuite vous pouvez simplement ajouter cela au début du chemin du fichier, 

    ImageIcon imageIconRefVar = new ImageIcon(filePath + "/imagepathname");

J'ai trouvé que cela résolvait le problème lorsque je l'utilisais dans le chemin (ce qui semblait étrange puisque ce devait être l'endroit où il se trouve, mais cela a fonctionné)

2
user3517913

Vous avez utilisé un chemin de fichier relatif relatif à l'exécution de votre projet.

Si cela fonctionne pour vous, vous pouvez changer le répertoire d'exécution de la racine du projet en répertoire binaire en:

  1. "Run" -> "Run configurations"
  2. Dans l'onglet "Arguments", recherchez les paramètres "répertoire de travail".
  3. Basculez de "Par défaut" à "Autre".
  4. Cliquez sur le bouton "Espace de travail" et sélectionnez le projet dans une fenêtre contextuelle, puis cliquez sur "OK". cela vous apportera quelque chose comme $(workspace_loc:proj-1).
  5. Ajoutez "/ bin" à la fin de celui-ci; enregistrer la configuration.

J'ai besoin de cela au lieu de simplement mettre des fichiers dans le répertoire racine du projet lorsque je fais une affectation et le professeur requiert une hiérarchie de fichiers spécifique; De plus, c'est plus portable que le chemin absolu.

1
Franklin Yu

Dans le répertoire de base, créez un dossier, nommez-le "res". Placez votre fichier dans le dossier "res".

utilisez String file = ".\\res\\strength.txt"; pour référencer l'emplacement de votre fichier.

Vous devez utiliser un dossier de ressources pour stocker tous les fichiers que vous utilisez dans votre programme (bonne pratique).

Et faites une référence de ce fichier à partir de votre répertoire racine. Le fichier est donc présent dans le package.

0
user7909000