如何从源包而不是资源目录加载文件
How to load a file from source package not resource directory
本项目为maven项目
我想读取一个文件同包而不是资源目录
我知道下面
- 读取maven结构中resource目录下的一个资源文件
- 在运行时,应用程序读取目标目录中的文件
并且真正知道为什么目录(源、资源)被拆分。
但我想知道如何读取同一个包中不在资源目录中的文件,即使不是正式文件(只是出于好奇)
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项目的maven构建如何工作。
如果我使用 maven 项目构建 java 项目,资源目录中的文件将复制到 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>
如果我没有设置用于将文件复制到目标目录的自定义构建选项,则 sqlService bean 的 属性 值只是“/sqlmap.xml”。
但是为此,sqlmap.xml 文件位于资源目录中。
copy success
本项目为maven项目
我想读取一个文件同包而不是资源目录
我知道下面
- 读取maven结构中resource目录下的一个资源文件
- 在运行时,应用程序读取目标目录中的文件
并且真正知道为什么目录(源、资源)被拆分。
但我想知道如何读取同一个包中不在资源目录中的文件,即使不是正式文件(只是出于好奇)
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项目的maven构建如何工作。
如果我使用 maven 项目构建 java 项目,资源目录中的文件将复制到 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>
如果我没有设置用于将文件复制到目标目录的自定义构建选项,则 sqlService bean 的 属性 值只是“/sqlmap.xml”。 但是为此,sqlmap.xml 文件位于资源目录中。
copy success