Ich möchte ein Java-Programm, das einen benutzerdefinierten Dateinamen aus dem aktuellen Verzeichnis liest (dasselbe Verzeichnis, in dem die .class-Datei ausgeführt wird).
Mit anderen Worten, wenn der Benutzer den Dateinamen "myFile.txt" angibt und sich diese Datei bereits im aktuellen Verzeichnis befindet:
reader = new BufferedReader(new FileReader("myFile.txt"));
funktioniert nicht. Warum?
Ich lasse es in Windows laufen.
Antworten:
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 befanden, als Sie die JVM gestartet haben)
Sie können mit getResourceAsStream () Dateien aus demselben Verzeichnis * wie die .class-Datei laden . Dadurch erhalten Sie einen InputStream, den Sie mit InputStreamReader in einen Reader konvertieren können .
* Beachten Sie, dass dieses "Verzeichnis" tatsächlich eine JAR-Datei sein kann, je nachdem, von wo die Klasse geladen wurde.
quelle
Versuchen
System.getProperty("user.dir")
Es gibt das aktuelle Arbeitsverzeichnis zurück.
quelle
Keine der obigen Antworten funktioniert für mich. Folgendes funktioniert bei mir.
Angenommen, Ihr Klassenname lautet Foo.java. Verwenden Sie diesen Code, um auf die Datei myFile.txt im selben Ordner wie Foo.java zuzugreifen:
URL path = Foo.class.getResource("myFile.txt"); File f = new File(path.getFile()); reader = new BufferedReader(new FileReader(f));
quelle
Dateien in Ihrem Projekt stehen Ihnen relativ zu Ihrem src-Ordner zur Verfügung. Wenn Sie wissen, in welchem Paket oder Ordner sich myfile.txt befindet, sagen Sie, dass es sich in befindet
Sie können den Pfad in "Proc.java" als "src / package1 / myfile.txt" angeben
quelle
Wenn Sie wissen, dass Ihre Datei dort gespeichert ist, wo sich Ihre Klassen befinden, befindet sich dieses Verzeichnis in 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));
quelle
Versuche dies:
BufferedReader br = new BufferedReader(new FileReader("java_module_name/src/file_name.txt"));
quelle
versuchen Sie es mit "." Z.B
File currentDirectory = new File(".");
Das hat bei mir funktioniert
quelle