wake-up-neo.com

Datei aus dem Projektordner Java abrufen

Ich möchte Datei aus dem Projektordner mit "File class" abrufen. Wie kann ich das tun?

File file=new File("x1.txt");
21
Saad Ahmad

Nun, es gibt viele verschiedene Möglichkeiten, eine Datei in Java zu erhalten, aber das ist der allgemeine Gist.

Vergessen Sie nicht, dass Sie das zumindest in eine try {} catch (Exception e){} einpacken müssen, da File Teil von Java.io ist, was bedeutet, dass es einen try-catch-Block haben muss.

Um nicht auf Ericsons Frage einzugehen, aber wenn Sie tatsächliche Pakete verwenden, haben Sie Probleme mit dem Speicherort von Dateien, es sei denn, Sie verwenden explizit den Speicherort. Relatives Pfading wird mit Paketen durcheinander gebracht.

dh

src/
    main.Java
    x.txt

In diesem Beispiel wird durch die Verwendung von File f = new File("x.txt"); innerhalb von main.Java eine Ausnahme für eine nicht gefundene Datei ausgelöst.

Die Verwendung von File f = new File("src/x.txt"); wird jedoch funktionieren.

Hoffentlich hilft das!

21
Singular1ty

Das hört sich an, als ob die Datei in Ihre Anwendung eingebettet ist.

Sie sollten getClass().getResource("/path/to/your/resource.txt") verwenden, die eine URL oder getClass().getResourceAsStream("/path/to/your/resource.txt"); zurückgibt.

Wenn es sich nicht um eine eingebettete Ressource handelt, müssen Sie den relativen Pfad vom Ausführungskontext Ihrer Anwendung zum Ort Ihrer Datei kennen

10
MadProgrammer

Wenn Sie keinen Pfad angeben und nur die Datei angeben (genau wie Sie), ist das Standardverzeichnis immer das Ihres Projekts (es befindet sich nicht im Ordner "src". Es befindet sich nur im Ordner Ihres Projekts).

9

Wenn Sie versuchen, eine Datei zu laden, die sich nicht im selben Verzeichnis wie Ihre Java-Klasse befindet, müssen Sie die Laufzeitverzeichnisstruktur verwenden und nicht die Struktur, die zur Entwurfszeit angezeigt wird. 

Um herauszufinden, wie die Struktur des Laufzeitverzeichnisses aussieht, überprüfen Sie das Verzeichnis {root-Projektverzeichnis}/target/classes. Dieses Verzeichnis ist über das "." URL.

Basierend auf der Antwort von Benutzer4284592 funktionierte Folgendes für mich:

ClassLoader cl = getClass().getClassLoader();
File file = new File(cl.getResource("./docs/doc.pdf").getFile());

mit der folgenden Verzeichnisstruktur:

{root dir}/target/classes/docs/doc.pdf

Ich hoffe, das hilft jedem, der Schwierigkeiten hat, die URL-Logik zu verstehen.

5
Chris Neve

Diese Zeilen funktionierten in meinem Fall

ClassLoader classLoader = getClass().getClassLoader();
File fi = new File(classLoader.getResource("test.txt").getFile());

test.txt-Datei in src bereitgestellt

2
doketan
String path = System.getProperty("user.dir")+"/config.xml";
File f=new File(path);
1
parth

Gegeben eine Datei application.yaml in test/resources

ll src/test/resources/
total 6
drwxrwx--- 1 root vboxsf 4096 Oct  6 12:23 ./
drwxrwx--- 1 root vboxsf    0 Sep 29 17:05 ../
-rwxrwx--- 1 root vboxsf  142 Sep 22 23:59 application.properties*
-rwxrwx--- 1 root vboxsf   78 Oct  6 12:23 application.yaml*
-rwxrwx--- 1 root vboxsf    0 Sep 22 17:31 db.properties*
-rwxrwx--- 1 root vboxsf  618 Sep 22 23:54 log4j2.json*

Aus dem Testkontext kann ich die Datei mit abrufen 

String file = getClass().getClassLoader().getResource("application.yaml").getPath(); 

was tatsächlich auf die Datei in test-classes zeigt

ll target/test-classes/
total 10
drwxrwx--- 1 root vboxsf 4096 Oct  6 18:49 ./
drwxrwx--- 1 root vboxsf 4096 Oct  6 18:32 ../
-rwxrwx--- 1 root vboxsf  142 Oct  6 17:35 application.properties*
-rwxrwx--- 1 root vboxsf   78 Oct  6 17:35 application.yaml*
drwxrwx--- 1 root vboxsf    0 Oct  6 18:50 com/
-rwxrwx--- 1 root vboxsf    0 Oct  6 17:35 db.properties*
-rwxrwx--- 1 root vboxsf  618 Oct  6 17:35 log4j2.json*
0
prayagupd

Ich habe gerade eine schnelle Google-Suche durchgeführt und das gefunden

System.getProperty("user.dir");

gibt das aktuelle Arbeitsverzeichnis als String zurück. Um eine Datei daraus zu erstellen, verwenden Sie einfach

File projectDir = new File(System.getProperty("user.dir"));
0
Ston

in JavaFx 8 

javafx.scene.image.Image img = new javafx.scene.image.Image("/myPic.jpg", true);

URL url = new URL(img.impl_getUrl());