2016-11-20 2 views
0

У меня есть проект Java со структурой следующим образом:Как я могу получить выходные результаты в папке ресурсов?

enter image description here

Я могу прочитать файл hotels.csv с помощью кода;

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

results.xml У меня есть выходной файл, который также должен быть в той же папке, как показано на рисунке. В настоящее время, я делаю это с помощью кода,

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

Как я могу сделать это программно только произнеся имя файла, скажем, result.xml и получить путь с помощью программы?

Я видел сообщение на форуме по той же проблеме и не получил никакого результата после его появления. Я настроил файл pom.xml как следующий,

<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> 

позже попытаться использовать метод, чтобы получить путь к папке ресурсов, как предложено,

 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, я намеревался использовать StreamResult result = new StreamResult(new File(getResourcePath() +"/result.xml"));

Я получаю java.lang.NullPointerException во время выполнения этой команды URI resourcePathFile = System.class.getResource("/RESOURCE_PATH").toURI();

UPDATE: Я также запустить команду mvn generate-resources process-resources предложил в post

ответ

0

You не может, и не должны делать это. Каталог src/main/resources не существует во время выполнения - ресурсы отображаются в файл jar в ту же структуру папок, что и файлы .class, с корневым пакетом в корневом файле jar. Во время выполнения нет src/main/anything.

Есть операции, которые создадут временный каталог, если он вам нужен, или вы можете написать в известное местоположение на hd, хотя это и плохие решения. Скорее, вы должны написать свой вывод для стандартизации и использовать инструменты конвейера linux (или dos) для перенаправления на путь и файл, продиктованные пользователем. Следующее, что лучше всего, - это выбрать местоположение целевого файла из переменной окружения.

Смежные вопросы