webentwicklung-frage-antwort-db.com.de

Wo kann ich eine Textdatei ablegen, die ich in Eclipse verwenden möchte?

Ich muss eine Textdatei lesen, wenn ich mein Programm starte. Ich benutze Eclipse und habe ein neues Java-Projekt gestartet. In meinem Projektordner habe ich den Ordner "src" und den Standard "JRE System Library" + staedteliste.txt ... Ich weiß nur nicht, wo ich die Textdatei ablegen soll. Ich habe buchstäblich jeden Ordner ausprobiert, an den ich denken konnte ... Ich kann keinen "fest codierten" Pfad verwenden, da die Textdatei in meiner App enthalten sein muss ...

Ich verwende den folgenden Code, um die Datei zu lesen, aber ich erhalte diesen Fehler:

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

Fragen Sie sich zuerst: Ist Ihre Datei eine interne Komponente Ihrer Anwendung? (Dies bedeutet normalerweise, dass es in Ihrer JAR oder WAR gepackt ist, wenn es sich um eine Web-App handelt; normalerweise handelt es sich um eine Konfigurationsdatei oder eine statische Ressource (schreibgeschützt)). 

Wenn die Antwort "Ja" lautet, möchten Sie keinen absoluten Pfad für die Datei angeben. Sie möchten jedoch auch nicht mit einem relativen Pfad darauf zugreifen (als Beispiel), da Java davon ausgeht, dass der Pfad relativ zum "aktuellen Verzeichnis" ist. Normalerweise ist die bevorzugte Methode für dieses Szenario das Laden von relativ aus dem Klassenpfad.

Java bietet Ihnen dazu die Methode classLoader.getResource () an. Und Eclipse (im normalen Setup) geht davon aus, dass src/ sich im Stammverzeichnis Ihres Klassenpfads befindet, sodass er nach dem Kompilieren alles in Ihr Ausgabeverzeichnis (bin/) kopiert, die Java-Dateien in kompilierter Form (.class), den Rest als ist.

Wenn Sie Ihre Datei beispielsweise in src/Files/myfile.txt platzieren, wird sie zur Kompilierungszeit in bin/Files/myfile.txt kopiert. und zur Laufzeit befindet sich bin/ in (der Wurzel) Ihres Klassenpfads. Durch Aufruf von getResource("/Files/myfile.txt") (in einigen seiner Varianten) können Sie es also lesen.

Bearbeitet: Wenn Ihre Datei konzeptionell an eine Java-Klasse gebunden ist (z. B. com.example.MyClass eine MyClass.cfg-Konfigurationsdatei), können Sie die getResource () - Methode der Klasse verwenden ein relativer Pfad (Ressource): MyClass.getResource("MyClass.cfg"). Die Datei wird dann im Klassenpfad durchsucht, wobei jedoch das Klassenpaket zuvor angehängt ist. In diesem Szenario legen Sie Ihre MyClass.cfg- und MyClass.Java-Dateien normalerweise in demselben Verzeichnis ab.

44
leonbloy

Ein Weg ist zu gehen

  1. Fügen Sie die Datei, mit der Sie arbeiten, zum Klassenpfad hinzu
  2. Verwenden Sie den Ressourcenlader, um die Datei zu suchen:

        URL url = Test.class.getClassLoader().getResource("myfile.txt");
        System.out.println(url.getPath());
        ...
    
  3. Öffne es
9
Greg Adamski

Erstellen Sie einfach einen Ordner Files unter src und legen Sie Ihre Datei dort ab . Dies wird wie src/Files/myFile.txt aussehen.

Hinweis: In Ihrem Code müssen Sie Folgendes angeben: Files/myFile.txt Z.

getResource("Files/myFile.txt");

Wenn Sie also Ihr Projekt erstellen und die JAR-Datei ausführen, sollte dies funktionieren.

2
Bernard Banta

Angenommen, Sie haben ein Projekt namens "TestProject" für Eclipse und Ihren Arbeitsbereichsordner befindet sich unter E:/Eclipse/Arbeitsbereich. Wenn Sie ein Eclipse-Projekt erstellen, lautet der Klassenpfad dann e:/Eclipse/workspace/TestProject. Wenn Sie versuchen, "staedteliste.txt" zu lesen, versuchen Sie, auf die Datei unter e:/Eclipse/workspace/TestProject/staedteliste.txt zuzugreifen.

Wenn Sie einen separaten Ordner für Ihr Projekt haben möchten, erstellen Sie den Ordner Dateien unter TestProject und greifen Sie mit (dem relativen Pfad) /Files/staedteliste.txt auf die Datei zu. Wenn Sie die Datei im Ordner src ablegen, müssen Sie mit /src/staedteliste.txt darauf zugreifen. Ein Dateiordner im src-Ordner wäre /src/Files/staedteliste.txt

Anstatt den relativen Pfad zu verwenden, können Sie den absoluten Pfad verwenden, indem Sie e:/Eclipse/workspace/ am Anfang hinzufügen. Die Verwendung des relativen Pfads ist jedoch besser, da Sie das Projekt verschieben können, ohne sich um Refactoring zu kümmern, solange die Projektordnerstruktur identisch ist.

2
mr popo

MJB

Bitte versuchen Sie das 

  1. In Eclipse "Rechtsklick" auf die Textdatei, die Sie verwenden möchten, Den gesamten auf der Festplatte gespeicherten Pfad sehen und kopieren /testpath/testfile.txt ")

  2. setzen Sie diesen vollständigen Pfad und versuchen Sie es.

  3. wenn es funktioniert, dann Klassenpfad-Problem sonst GOK :)

0
sandejai

Wenn es sich um ein einfaches Projekt handelt, sollten Sie die TXT-Datei direkt in den Projektordner ziehen können. Der "Projektordner" wäre insbesondere der Ordner auf der höchsten Ebene. Ich versuchte dies (für ein Hausaufgabenprojekt, das ich mache), indem ich die TXT-Datei in den src-Ordner legte, aber das hat nicht funktioniert. Aber schließlich habe ich herausgefunden, es in die Projektdatei aufzunehmen.

Ein gutes Tutorial hierfür ist http://www.vogella.com/articles/JavaIO/article.html . Ich habe dies als Intro für I/O verwendet und es hat geholfen.

0
Mark

Abhängig von Ihrem Java-Klassenpaketnamen sind Sie wahrscheinlich 4 oder 5 Ebenen in der Verzeichnisstruktur.

Wenn Ihr Java-Klassenpaket beispielsweise com.stackoverflow.project ist, befindet sich Ihre Klasse unter src/com/stackoverflow/project.

Sie können entweder die Verzeichnisstruktur mit mehreren ../ nach oben verschieben oder die Textdatei in dasselbe Paket wie Ihre Klasse verschieben. Es wäre einfacher, die Textdatei zu verschieben.

0

Sie sollten sich wahrscheinlich die verschiedenen Varianten von getResource in der Klasse ClassLoader ansehen: http://Java.Sun.com/j2se/1.4.2/docs/api/Java/lang/ClassLoader.html

0
pdbartlett

Schauen Sie sich dieses Video an

Alles, was Sie tun müssen, ist, Ihre Datei auszuwählen (vorausgesetzt, es handelt sich um dieselbe einfache TXT-Datei), ziehen Sie sie dann in das Projekt in Eclipse und legen Sie sie dort ab. Wählen Sie Kopieren statt Link, da dies flexibler ist. Das ist es - ich habe es gerade ausprobiert.

0
Nenad Bulatovic