如何从源包而不是资源目录加载文件

时间:2019-01-25 07:55:59

标签: java io resources classpath

这个项目是maven项目

我想读取相同文件而不是资源目录的文件

我知道以下

  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的主要功能是在正常的Java项目上运行良好,但maven项目却无法运行

如果我将sample.txt文件复制到目标目录中的同一软件包(io软件包)中,我检查是否正常

但不是那些,我如何在maven项目中的同一包中读取文件?

read a file from same package

target directory empty resource(sample.txt)

1 个答案:

答案 0 :(得分:0)

回答我的问题。

首先,我不清楚如何在Java项目上进行Maven构建。

如果我使用maven项目构建Java项目,则资源目录中的文件将复制到target / classes /

其他以'.java'结尾的目录文件被编译。

已编译的“ .class”文件位于目标/类/ {包路径}。

但是除末尾的'.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>

如果我没有设置用于将文件复制到目标目录的自定义生成选项,则sqlService bean的属性值只是“ /sqlmap.xml”。 但是为此,sqlmap.xml文件位于资源目​​录中。

copy success