【问题标题】:How to load a file from source package not resource directory如何从源包而不是资源目录加载文件
【发布时间】:2023-04-06 05:49:01
【问题描述】:

这个项目是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 的 main 在普通 Java 项目上运行良好,但 maven 项目却不行

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

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

read a file from same package

target directory empty resource(sample.txt)

【问题讨论】:

    标签: java io resources classpath


    【解决方案1】:

    回答我的问题。

    首先,我不清楚如何使用 maven build 关于 java 项目。

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

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

    已编译的“.class”文件位于 target/classes/{package path}。

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

    【讨论】:

      猜你喜欢
      • 2010-11-13
      • 2016-08-28
      • 1970-01-01
      • 2012-03-14
      • 1970-01-01
      • 2022-01-02
      • 2020-12-26
      • 2013-12-19
      • 1970-01-01
      相关资源
      最近更新 更多