web-dev-qa-db-fra.com

Où mettre un fichier texte que je veux utiliser dans Eclipse?

Je dois lire un fichier texte lorsque je lance mon programme. J'utilise Eclipse et j'ai démarré un nouveau projet Java. Dans mon dossier de projet, j'ai le dossier "src" et la "bibliothèque système JRE" standard + staedteliste.txt ... Je ne sais tout simplement pas où placer le fichier texte. J'ai littéralement essayé tous les dossiers auxquels je pouvais penser .... Je ne peux pas utiliser de chemin "codé en dur" car le fichier texte doit être inclus avec mon application ...

J'utilise le code suivant pour lire le fichier, mais j'obtiens cette erreur:

Error:Java.io.FileNotFoundException:staedteliste.txt(No such file or directory)

public class Test {

ArrayList<String[]> values;

public static void main(String[] args) {
    // TODO Auto-generated method stub

    URL url = Test.class.getClassLoader().getResource("src/mjb/staedteliste.txt");
    System.out.println(url.getPath()); // I get a nullpointerexception here!
    loadList();
}

public static void loadList() {
    BufferedReader reader;
    String zeile = null;

    try {
        reader = new BufferedReader(new FileReader("src/mjb/staedteliste.txt"));
        zeile = reader.readLine();          

        ArrayList<String[]> values = new ArrayList<String[]>();

        while (zeile != null) {             
            values.add(zeile.split(";"));
            zeile = reader.readLine();
        }
        System.out.println(values.size());
        System.out.println(zeile);

    } catch (IOException e) {
        System.err.println("Error :"+e);
    }
}

}

25
MJB

Posez-vous d'abord la question suivante: votre fichier est-il un composant interne de votre application? (Cela implique généralement que le fichier est compressé dans votre JAR ou votre fichier WAR s'il s'agit d'une application Web; il s'agit généralement d'un fichier de configuration ou d'une ressource statique en lecture seule). 

Si la réponse est oui, vous ne souhaitez pas spécifier de chemin absolute pour le fichier. Mais vous ne voulez pas non plus y accéder avec un chemin relatif (comme dans votre exemple), car Java suppose que ce chemin est relatif au "répertoire courant". Habituellement, la méthode recommandée pour ce scénario consiste à le charger relativement à partir du chemin de classe.

Java vous fournit la méthode classLoader.getResource () pour le faire. Et Eclipse (dans la configuration normale) suppose que src/ doit se trouver à la racine de votre chemin de classe, de sorte qu'après la compilation, il copie tout dans votre répertoire de sortie (bin/), les fichiers Java compilés (.class), est.

Ainsi, par exemple, si vous placez votre fichier dans src/Files/myfile.txt, il sera copié au moment de la compilation dans bin/Files/myfile.txt; et, au moment de l'exécution, bin/ sera dans (la racine de) votre chemin de classe. Donc, en appelant getResource("/Files/myfile.txt") (dans certaines de ses variantes), vous pourrez le lire.

Edited: En outre, si votre fichier est lié conceptuellement à une classe Java (par exemple, un com.example.MyClass a un fichier de configuration associé à MyClass.cfg), vous pouvez utiliser la méthode getResource () de la classe et l'utiliser. un chemin relatif (ressource): MyClass.getResource("MyClass.cfg"). Le fichier sera alors recherché dans le chemin de classe, mais avec le paquet de classe pré-ajouté. Ainsi, dans ce scénario, vous placerez généralement vos fichiers MyClass.cfg et MyClass.Java dans le même répertoire.

44
leonbloy

Un chemin à prendre est de

  1. Ajoutez le fichier avec lequel vous travaillez au classpath
  2. Utilisez le chargeur de ressources pour localiser le fichier:

        URL url = Test.class.getClassLoader().getResource("myfile.txt");
        System.out.println(url.getPath());
        ...
    
  3. L'ouvrir
9
Greg Adamski

Créez simplement un dossier Files sous src et placez-y votre fichier . Cela ressemblera à src/Files/myFile.txt

Remarque: Dans votre code, vous devez spécifier comme ceci Files/myFile.txt

getResource("Files/myFile.txt");

Ainsi, lorsque vous générez votre projet et exécutez le fichier .jar, cela devrait pouvoir fonctionner.

2
Bernard Banta

Supposons que vous ayez un projet appelé "TestProject" sur Eclipse et que le dossier de votre espace de travail se trouve dans E:/Eclipse/workspace. Lorsque vous créez un projet Eclipse, votre chemin d'accès aux classes est alors e:/Eclipse/workspace/TestProject. Lorsque vous essayez de lire "staedteliste.txt", vous essayez d'accéder au fichier à e:/Eclipse/workspace/TestProject/staedteliste.txt.

Si vous souhaitez avoir un dossier distinct pour votre projet, créez le dossier Fichiers sous TestProject, puis accédez au fichier avec (le chemin relatif) /Files/staedteliste.txt. Si vous placez le fichier dans le dossier src, vous devez y accéder à l'aide de /src/staedteliste.txt. Un dossier de fichiers dans le dossier src serait /src/Files/staedteliste.txt

Au lieu d'utiliser le chemin relatif, vous pouvez utiliser le chemin absolu en ajoutant e:/Eclipse/workspace/ au début, mais utiliser le chemin relatif est préférable, car vous pouvez déplacer le projet sans vous soucier de la refactorisation tant que la structure de dossiers du projet est la même.

2
mr popo

MJB

S'il vous plaît essayez ceci 

  1. Dans Eclipse, cliquez avec le bouton droit de la souris sur le fichier texte que vous voulez utiliser. Voir et copier le chemin complet stocké sur le disque dur, comme (sous UNIX) /home/sjaisawal/Space-11.4-template/provisioning/devenv/Test/src /testpath/testfile.txt ")

  2. mettez ce chemin complet et essayez.

  3. si cela fonctionne alors le problème de chemin de classe sinon GOK :)

0
sandejai

S'il s'agit d'un projet simple, vous devriez pouvoir faire glisser le fichier txt directement dans le dossier du projet. Plus précisément, le "dossier de projet" serait le dossier de plus haut niveau. J'ai essayé de faire cela (pour un projet de devoir que je fais) en plaçant le fichier txt dans le dossier src, mais cela n'a pas fonctionné. Mais finalement, j'ai décidé de le mettre dans le fichier de projet.

Un bon tutoriel pour cela est http://www.vogella.com/articles/JavaIO/article.html . J'ai utilisé cela comme une introduction à i/o et cela a aidé.

0
Mark

En fonction du nom de votre package de classe Java, vous avez probablement 4 ou 5 niveaux dans la structure de répertoires.

Si votre package de classe Java est, par exemple, com.stackoverflow.project, votre classe se trouve dans src/com/stackoverflow/project.

Vous pouvez soit monter la structure de répertoires avec plusieurs ../, soit déplacer le fichier texte dans le même package que votre classe. Il serait plus facile de déplacer le fichier texte.

0
Gilbert Le Blanc

Vous devriez probablement jeter un coup d'œil aux différentes variantes de getResource dans la classe ClassLoader: http://Java.Sun.com/j2se/1.4.2/docs/api/Java/lang/ClassLoader.html

0
pdbartlett

Jetez un coup d'oeil à cette vidéo

Tout ce que vous avez à faire est de sélectionner votre fichier (en supposant que ce soit la même forme de fichier txt), puis de le faire glisser vers le projet dans Eclipse, puis de le déposer là. Choisissez Copier au lieu de Lien, car il est plus flexible. C'est ça - je viens d'essayer ça.

0
Nenad Bulatovic