Как загрузить файл из исходного пакета, а не из каталога ресурсов - PullRequest
0 голосов
/ 25 января 2019

Этот проект - Maven Project

Я хочу прочитать файл того же пакета, а не каталог ресурсов

Я знаю, что ниже

  1. чтение файла ресурса в каталоге ресурсов в структуре maven
  2. во время выполнения приложение считывает файл в целевой директории

и действительно знаете, почему каталоги (источник, ресурс) разделены.

Но мне интересно, как читать файл в том же пакете, а не в каталоге ресурсов, даже если он не формальный (просто любопытство)

FileIo.java

package hardlearner.springStudy.learningtest.io;

import java.io.IOException;
import java.io.InputStream;

public class FileIo {
    public static void main(String[] args) throws IOException {
        InputStream is = FileIo.class.getResourceAsStream("sample.txt");
        if ( is == null) {
            System.out.println("null");
        }else {
            System.out.println("not null");
            System.out.println((char)is.read());
        }
    }
}

sample.txt

plz read me

FileIo.java main работает нормально на обычном Java-проекте, но maven-проект не

И я проверил работоспособность, если скопировал файл sample.txt в том же пакете (io package) в целевой каталог

Но не те, как я могу прочитать файл в том же пакете в проекте Maven?

чтение файла из того же пакета

целевой каталог пустой ресурс (sample.txt)

1 Ответ

0 голосов
/ 31 января 2019

Дайте ответ на мой вопрос.

Во-первых, я не знаю четко, как работает maven build о проекте Java.

Если я собираю проект Java с использованием проекта maven, файлы вкаталог ресурсов копируется в target / classes /

, а остальные файлы каталога, оканчивающиеся на «.java», компилируются.

Скомпилированные файлы «.class» расположены в target / classes / {путь к пакету}.

Но другие файлы, за исключением завершенного '.java', не находятся в целевом каталоге.

Поскольку настройка сборки по умолчанию maven копирует в целевой каталог только файлы в каталоге ресурсов.

Поэтому я использую пользовательский параметр для сборки.

<build>
    <resources>
        <resource>
            <filtering>true</filtering><!-- if it is neccessary -->
            <directory>${project.basedir}/src/main/java/hardlearner/springStudy/user/sqlservice</directory><!-- from -->
            <targetPath>${project.build.directory}/classes/hardlearner/springStudy/user/sqlservice</targetPath><!-- to -->
            <includes><!-- what -->
                <include>sqlmap.xml</include>
            </includes>
        </resource>
    </resources>
</build>

Этот параметр копирует файл sqlmap.xml из исходного пакета в целевой каталог, создавая ту же структуру пакета.

<bean id="sqlService" class="hardlearner.springStudy.user.sqlservice.XmlSqlService">
<!-- value for target/claases/hardlearner/ ... -->    
    <property name="sqlmapFile" value="/hardlearner/springStudy/user/sqlservice/sqlmap.xml"/>
</bean>

, если я этого не сделаюt установить пользовательскую опцию сборки для копирования файла в целевой каталог, значение свойства bean-компонента sqlService просто "/sqlmap.xml".Но для этого файл sqlmap.xml находится в каталоге ресурсов.

копирование успешно

...