Seite 1 von 1

Textdatei in Java einlesen

Verfasst: 28.03.2012 11:17
von Angelo
Ich habe eine Textdatei "test.txt", die ich in denjenigen Ordner gelegt habe, wo auch die class-Datei zu finden ist. Ich möchte diese Textdatei einlesen und deren Inhalt zeilenweise ausgeben. Aber leider wird nur der else-Zweig der if-Abfrage durchlaufen und dementsprechend die Meldung "Textdatei nicht gefunden" herausgegeben. Eine Lösung wäre natürlich die Angabe eines absoluten Pfades für die Textdatei. Aber geht es nicht auch anders?

Code: Alles auswählen

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;

public class TextEinlesen {

	public static void main(String[] args) {
		File myFile = new File("test.txt");
		if (myFile.exists()) {
			try {
				FileReader fR = new FileReader(myFile);
			    BufferedReader bR = new BufferedReader(fR);
			    String zeile = null;
			    while ((zeile = bR.readLine()) != null) {
			    	System.out.println(zeile);
			    }
			    bR.close();
			} catch(Exception ex) {
				//;
			}
		} else { 
			System.out.println("Textdatei nicht gefunden!");
		}
	}
}

Re: Textdatei in Java einlesen

Verfasst: 31.03.2012 15:46
von iostream
Also bei mir funktioniert dein Code ohne Probleme.
Bist du sicher das die Textdatei wirklich in dem Verzeichnis liegt, wo sich die class-Datei befindet?

Mfg
iostream

Re: Textdatei in Java einlesen

Verfasst: 31.03.2012 22:25
von Angelo
Ich habe mit dem Befehl

Code: Alles auswählen

System.out.println(myFile.getAbsoutePath());

herausbekommen, dass ich meine test.txt in den Java-Projektordner (ich benutze Eclipse) legen muss. Aber wenn ich den class-Ordner als Ort für die text.txt nehmen will: Gibt es da im Zusammenhang mit der Klasse File eine Art getClass().getResource()-Befehl?

Re: Textdatei in Java einlesen

Verfasst: 01.04.2012 01:39
von Danilo
Bei mir funktionierte Dein Code auch nicht (mit NetBeans IDE).

Mit System.getProperty("java.class.path") bekommt man einen String zurück, mit dem
Path zu Deiner .class.
Allerdings können da mehrere Paths drin stehen, also dachte ich mir, ich durchsuche
einfach alle diese classpaths nach der Datei.

Dabei ist zu beachten, dass die Separatoren für Files und Paths auf anderen Systemen
anders sein können:
PathSeparator auf Windows = ";" - auf Unix = ":"
FileSeparator auf Windows = "\" - auf Unix = "/"

Also nicht hardcoden, sondern File.separator und File.pathSeparator nehmen.

Code: Alles auswählen

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;

public class TextEinlesen {

   private static File searchClassPathForFile(String file) {
      //String pathseparator = File.pathSeparator; //System.getProperty("path.separator");
      //String fileseparator = File.separator;     //System.getProperty("file.separator");
      String classpath[] = System.getProperty("java.class.path").split(File.pathSeparator);

      for(String path : classpath)
      {
          //System.out.println("class path: "+path);
          File myFile = new File(path+File.separator+file);
          if(myFile.exists()) return myFile;
      }
      return null;
   }

   public static void main(String[] args) {
      //System.out.println(System.getProperty("java.class.path"));
      //System.out.println(System.getProperty("user.dir"));

      File myFile = searchClassPathForFile("test.txt");
      if (myFile != null) {
         try {
            FileReader fR = new FileReader(myFile);
             BufferedReader bR = new BufferedReader(fR);
             String zeile = null;
             while ((zeile = bR.readLine()) != null) {
                System.out.println(zeile);
             }
             bR.close();
         } catch(Exception ex) {
            //;
         }
      } else {
         System.out.println("Textdatei nicht gefunden!");
      }
   }
}

Re: Textdatei in Java einlesen

Verfasst: 01.04.2012 01:40
von iostream
Folgendes müsste funktionieren:

Code: Alles auswählen

new File(TextEinlesen.class.getResource("test.txt").toURI())
Falls die Datei nicht existiert liefert class.getResource(...) allerdings null zurück (d.h. mögliche NullPointerException bei obiger Benutzung)
und du musst eine URISyntaxException abfangen.

Re: Textdatei in Java einlesen

Verfasst: 01.04.2012 11:59
von Angelo
Danke für Eure Antworten!. Mit "new File(TextEinlesen.class.getResource("test.txt").toURI())" klappt es!! Die Datei test.txt kann jetzt im Ordner für die class-Dateien liegen und wird eingelesen. Thanks! :)