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?
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);
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());
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.
sieht aus wie Sie ein Maven-Projekt und so Ressourcen in Klassenpfad durch
gehen für
getClass().getResource("classpath:storedProcedures.sql")