2009-09-26 13 views
50

Ich möchte ein Java-Programm, das einen benutzerdefinierten Dateinamen aus dem aktuellen Verzeichnis (das gleiche Verzeichnis, in dem die .class-Datei ausgeführt wird) liest.Java, liest eine Datei aus dem aktuellen Verzeichnis?

Mit anderen Worten, wenn der Benutzer den Dateinamen angibt „MYFILE.TXT“, und diese Datei ist bereits im aktuellen Verzeichnis zu sein:

reader = new BufferedReader(new FileReader("myFile.txt")); 

funktioniert nicht. Warum?

Ich bin es in Windows ausgeführt.

+1

Das gleiche ist in Linux auch –

Antwort

37

Das aktuelle Verzeichnis ist nicht (unbedingt) das Verzeichnis, in dem sich die .class-Datei befindet. Es ist das Arbeitsverzeichnis des Prozesses. (dh: das Verzeichnis, in dem Sie sich beim Starten der JVM befanden)

Sie können Dateien aus demselben Verzeichnis wie die .class-Datei mit getResourceAsStream() laden. Dadurch erhalten Sie einen InputStream, den Sie mit InputStreamReader in einen Reader konvertieren können.

+12

+1. Wenn Sie eine IDE wie Eclipse oder Idea ausführen, ist das aktuelle Verzeichnis das Projektverzeichnis, nicht die Compilerausgabe. –

+1

@piiligrim, hängt von Ihrer Startkonfiguration ab –

+0

@DenisTulskiy Ich arbeite an Eclipse als die gleiche Codierung wie die Beispielperson tat. Meins funktioniert immer noch nicht, Warum ist das so? – windsound

58

Versuchen

System.getProperty("user.dir") 

Es gibt das aktuelle Arbeitsverzeichnis.

+3

, aber es gibt nur den Pfad bis zum Stammverzeichnis des Projekts zurück. Wie können wir Pfad des aktuellen Pakets in der Hauptmethode von Java –

+0

bekommen Dies ist sehr nützlich. Vielen Dank :) – whitehat

4

Wenn Sie wissen, dass Ihre Datei dort gespeichert wird, wo sich Ihre Klassen befinden, befindet sich dieses Verzeichnis auf Ihrem Klassenpfad. In diesem Fall können Sie sicher sein, dass diese Lösung Ihr Problem löst:

URL path = ClassLoader.getSystemResource("myFile.txt"); 
if(path==null) { 
    //The file was not found, insert error handling here 
} 
File f = new File(path.toURI()); 

reader = new BufferedReader(new FileReader(f)); 
21

Keine der obigen Antwort funktioniert für mich. Hier ist, was für mich funktioniert.

Lassen Sie uns sagen, dass Ihre Klassenname ist Foo.java, wie Foo.java im selben Ordner auf dem MYFILE.TXT zuzugreifen, verwenden Sie diesen Code:

URL path = Foo.class.getResource("myFile.txt"); 
File f = new File(path.getFile()); 
reader = new BufferedReader(new FileReader(f)); 
-3

Dies funktioniert auch:

Path file=Paths.get("Your file path"); 
InputStream is=Files.newInputStream(file); 
BufferedReader br=new BufferedReader(new InputStreamReader(is)); 
4

Dateien in Ihrem Projekt stehen Ihnen relativ zu Ihrem src-Ordner zur Verfügung. wenn Sie, welches Paket oder einen Ordner meinedatei.txt kennen sein wird, sagen, es ist in

----src 
--------package1 
------------myfile.txt 
------------Prog.java 

Sie seinen Weg als „src/package1/myfile.txt“ von Prog.java angeben

Verwandte Themen