Textdatei in Java einlesen

Fragen zu allen anderen Programmiersprachen.
Angelo
Beiträge: 102
Registriert: 20.02.2010 14:47
Wohnort: Berlin

Textdatei in Java einlesen

Beitrag 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!");
		}
	}
}
PB 5.50; Win 7
iostream
Beiträge: 109
Registriert: 15.06.2008 12:59

Re: Textdatei in Java einlesen

Beitrag 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
OS: Windows 8.1 Pro
Angelo
Beiträge: 102
Registriert: 20.02.2010 14:47
Wohnort: Berlin

Re: Textdatei in Java einlesen

Beitrag 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?
PB 5.50; Win 7
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Textdatei in Java einlesen

Beitrag 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!");
      }
   }
}
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
iostream
Beiträge: 109
Registriert: 15.06.2008 12:59

Re: Textdatei in Java einlesen

Beitrag 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.
OS: Windows 8.1 Pro
Angelo
Beiträge: 102
Registriert: 20.02.2010 14:47
Wohnort: Berlin

Re: Textdatei in Java einlesen

Beitrag 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! :)
PB 5.50; Win 7
Antworten