web-dev-qa-db-de.com

Java Spring - Wie kann man mit classpath einen Dateispeicherort angeben?

Wie kann ich mit dem Klassenpfad den Speicherort einer Datei angeben, die sich in meinem Spring-Projekt befindet?

Das habe ich momentan:

FileReader fr = new FileReader("C:\\Users\\Corey\\Desktop\\storedProcedures.sql");

Dies ist auf meinem Desktop fest codiert. Ich möchte den Pfad zu der Datei in meinem Projekt verwenden können.

FileReader fr = new FileReader("/src/main/resources/storedProcedures.sql");

Irgendwelche Vorschläge?

31
Takkun

Sprechen wir über Standard Java.io.FileReader ? Funktioniert nicht, aber es ist nicht schwer ohne.

Der Inhalt des /src/main/resources maven-Verzeichnisses wird im Stammverzeichnis von CLASSPATH abgelegt. Sie können ihn also einfach mit folgendem Befehl abrufen:

InputStream is = getClass().getResourceAsStream("/storedProcedures.sql");

Wenn das Ergebnis nicht null ist (Ressource nicht gefunden), können Sie es in einen Leser einwickeln:

Reader reader = new InputStreamReader(is);
37

Aus einer Antwort von @NimChimpsky in ähnliche Frage :

Resource resource = new ClassPathResource("storedProcedures.sql");
InputStream resourceInputStream = resource.getInputStream();

Verwendung von ClassPathResource und Schnittstelle Resource . Stellen Sie sicher, dass Sie das Ressourcenverzeichnis korrekt hinzufügen (fügen Sie /src/main/resources/ dem Klassenpfad hinzu).

Beachten Sie, dass Resource über eine Methode zum Abrufen eines Java.io.File verfügt, sodass Sie auch Folgendes verwenden können:

Resource resource = new ClassPathResource("storedProcedures.sql");
FileReader fr = new FileReader(resource.getFile());
9
PhoneixS

Spring verfügt über org.springframework.core.io.Resource, die für solche Situationen entwickelt wurde. Von context.xml können Sie Klassenpfade an die Bean übergeben

<bean class="test.Test1">
        <property name="path" value="classpath:/test/test1.xml" />
    </bean>

und Sie bekommen es in Ihrer Bohne als Ressource:

public void setPath(Resource path) throws IOException {
    File file = path.getFile();
    System.out.println(file);
    }

ausgabe

D:\workspace1\spring\target\test-classes\test\test1.xml

Jetzt können Sie es in einem neuen FileReader (Datei) verwenden.

5

sieht aus wie Sie ein Maven-Projekt und so Ressourcen in Klassenpfad durch

gehen für

getClass().getResource("classpath:storedProcedures.sql")
0
Jigar Joshi