2016-03-19 16 views
0

Ich versuche, eine Datei außerhalb meines aktuellen Arbeitsverzeichnisses zu lesen, indem ich die Klassen File und URL in Java verwende. Ich weiß, dass das aktuelle Arbeitsverzeichnis standardmäßig durch eine . 'repräsentiert' wird.So erhalten Sie den absoluten Pfad der Dateien außerhalb des aktuellen Arbeitsverzeichnisses [java]

meine Java-Klasse Unter der Annahme ist unter /folders/Desktop/MyClass.java, wenn ich eine Datei file1.txt in /folders/Desktop/file1.txt lesen will, kann ich folgendes tun:

URL url = getClass().getResource("./file1.txt"); /* or "./anotherFolder/../file1.txt", or simply "file1.txt"*/ 
File f = new File(url.getPath()); 

und alles funktioniert wie erwartet.

Aber was soll ich tun, um eine Datei zu lesen, die sich nicht im aktuellen Arbeitsverzeichnis befindet und sich nicht in einem Unterverzeichnis davon befindet? Zum Beispiel, wenn der Pfad der Datei /folders/file1.txt ist? Ich habe überall gesucht, kann aber nichts finden. Ich habe versucht ../file1.txt, ./../file1.txt und andere, aber nichts funktioniert. Vielleicht habe ich etwas verpasst oder vielleicht habe ich nicht an den richtigen Stellen gesucht.

+0

Was ist falsch mit der neuen Datei ("/ folders/file1.txt")? – Turo

+0

Es ist nichts falsch mit dieser Anweisung, es funktioniert in meinem Fall. Das Problem tritt auf, wenn ich Dateien lesen möchte, die nicht in Unterverzeichnissen des aktuellen Arbeitsverzeichnisses sind. Insbesondere wird eine java.lang.NullPointerException ausgelöst, wenn ich versuche, eine Instanz der File-Klasse zu erstellen. – Process0

+0

Ich meine, verwende keine Ressource, nur neue Datei (Dateiname). Die Datei kann beliebig sein, solange der Pfad korrekt ist. Wie kann NPE geworfen werden, wenn der Dateiname nicht null ist? – Turo

Antwort

0

Wenn Sie dem Dateinamen keinen Pfad angeben, sucht java in dem Verzeichnis, in dem die App ausgeführt wird.

Beispiel:

Dieser true gedruckt wird, wenn die Datei im Hauptordner des Projektes ist es ...

public static void main(String[] args) { 
     final File foo = new File("asd.txt"); 
     System.out.println(foo.exists()); 
    } 

EDit:

, wenn die Datei, wenn nicht in diesem Ordner dann Sie können in der Ordnerstruktur mit den Operatoren "./" oder "../" ... "nach oben" gehen oder tiefer in die Ordner File("/src/asd.txt") gehen, zum Beispiel ist die Datei im Ordner src.

.

enter image description here

+0

Ja, ich weiß. In der Tat habe ich keine Art von Problem mit Dateien im aktuellen Arbeitsverzeichnis und Unterverzeichnissen davon. Es gibt kein Projekt !!! – Process0

0

Wenn Sie eine Datei zugreifen möchten, die nicht unter dem aktuellen Arbeitsverzeichnis würden Sie entweder das Dateisystem programmatisch durchqueren oder würden Sie einen absoluten Pfad durch eine Benutzereingabe und konstruieren die java.io.File Objekt mit new File(absolutePathAsString) erhalten . Sie können auch die neuere java.nio.file API in Betracht ziehen.