2016-11-20 2 views
0

Ich habe ein Java-Projekt mit der Struktur, wie folgend:Wie kann ich die Ausgabeergebnisse im Ressourcenordner abrufen?

enter image description here

ich die hotels.csv Datei mit dem Code lesen kann;

ClassLoader classLoader = getClass().getClassLoader(); 
    File file = new File(classLoader.getResource("hotels.csv").getFile()); 

Ich habe results.xml Ausgabedatei, die auch im gleichen Ordner sein muss wie in der Abbildung dargestellt. Derzeit ich, dass der Code,

  StreamResult result = new StreamResult(new File("src/main/resources/result.xml")); 

Wie kann ich das tut programmatisch nur die Dateinamen sagen, sagen sie, result.xml und den Weg mit dem Programm?

Ich habe einen Beitrag im Forum für das gleiche Problem gesehen und bekam kein Ergebnis nach dem Folgen. Ich baut die pom.xml Datei wie folgend,

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.test</groupId> 
    <artifactId>Trivago</artifactId> 
    <version>1.0-SNAPSHOT</version> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <source>1.8</source> 
        <target>1.8</target> 
       </configuration> 
      </plugin> 
     </plugins> 
     <resources> 
      <resource> 
       <directory>${RESOURCE_PATH}</directory> 
       <filtering>true</filtering> 
      </resource> 
     </resources> 
    </build> 

    <packaging>jar</packaging> 

    <name>Trivago</name> 
    <url>http://maven.apache.org</url> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <!-- Use the latest version whenever possible. --> 
     <jackson.version>2.4.4</jackson.version> 
     <RESOURCE_PATH>${project.basedir}/src/main/resources</RESOURCE_PATH> 

    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>3.8.1</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>commons-validator</groupId> 
      <artifactId>commons-validator</artifactId> 
      <version>1.4.0</version> 
     </dependency> 
     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-databind</artifactId> 
      <version>${jackson.version}</version> 
     </dependency> 
     <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-resources-plugin --> 
     <dependency> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-resources-plugin</artifactId> 
      <version>3.0.1</version> 
     </dependency> 
    </dependencies> 

</project> 

Eine später versuchen, die Methode zu verwenden, um den Pfad für die Ordner Ressourcen zu erhalten, wie vorgeschlagen,

 private static String getResourcePath() { 

     try { 
      URI resourcePathFile = System.class.getResource("/RESOURCE_PATH").toURI(); 
      String resourcePath = Files.readAllLines(Paths.get(resourcePathFile)).get(0); 
//   System.out.println("resourcePath = " + resourcePath); 

      URI rootURI = new File("").toURI(); 
      URI resourceURI = new File(resourcePath).toURI(); 
      URI relativeResourceURI = rootURI.relativize(resourceURI); 
      return relativeResourceURI.getPath(); 
     } catch (Exception e) { 
      return null; 
     } 
    } 

Leter, ich sollte StreamResult result = new StreamResult(new File(getResourcePath() +"/result.xml"));

verwenden

Ich bekomme java.lang.NullPointerException beim Ausführen dieser Befehlszeile URI resourcePathFile = System.class.getResource("/RESOURCE_PATH").toURI();

UPDATE: Ich betreibe auch den Befehl mvn generate-resources process-resources vorgeschlagen in der post

Antwort

0

Sie kann nicht, und sollte nicht, werden dies zu tun. Das Verzeichnis src/main/resources existiert zur Laufzeit nicht - die Ressourcen werden in die JAR-Datei in die gleiche Ordnerstruktur wie die .class-Dateien mit dem Root-Paket im Stammverzeichnis der JAR-Datei gemappt. Zur Laufzeit gibt es keine src/main/anything.

Es gibt Operationen, die ein temporäres Verzeichnis erstellen, wenn Sie eines brauchen, oder Sie können an einen bekannten Ort auf dem HD schreiben, obwohl dies beides schlechte Lösungen sind. Stattdessen sollten Sie Ihre Ausgabe in standard-out schreiben und linux (oder dos) -Pipeline-Tools verwenden, um diese auf einen Pfad und eine Datei umzuleiten, die vom Benutzer diktiert wurden. Die nächste beste Sache ist, den Speicherort der Zieldatei von einer Umgebungsvariablen abzurufen.

Verwandte Themen