我有一个抓取网页的程序。我使用JSoup和Selenium。为了在JSoup请求中配置用户代理,我有一个包含用户代理列表的userAgents.txt文件。在每次执行时,我有一个读取.txt文件并返回随机用户代理的方法。
在IntelliJ中运行时,程序按预期工作。
当我试图用mvn clean package
构建.jar文件时,问题发生了。当运行.jar文件时,我得到了FileNotFoundException
,因为程序找不到userAgents.txt
文件。
如果我删除此功能,并 * 硬编码 * 用户代理,我没有问题。
文件当前在src/main/resources
中。执行.jar时,我会收到异常:
java.io.FileNotFoundException:./src/main/resources/userAgents.txt(没有这样的文件或目录)
我尝试了maven-resources-plugin将文件复制到目标文件夹:
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.3.0</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/extra-resources</outputDirectory>
<includeEmptyDirs>true</includeEmptyDirs>
<resources>
<resource>
<directory>${basedir}/src/main/resources</directory>
<filtering>false</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
即使在程序中更改路径(从target/extra-resources
打开文件),错误仍然存在。
我还添加了这个<resources>
,但什么也没得到:
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.txt</include>
<include>**/*.csv</include>
</includes>
</resource>
</resources>
在程序中,我使用以下代码阅读文件:
String filePath = "./src/main/resources/userAgents.txt";
File extUserAgentLst = new File(filePath);
Scanner usrAgentReader = new Scanner(extUserAgentLst);
"所以我的问题是“
- 如何确保
userAgents.txt
文件在.jar文件中,这样当我运行它时,程序从这个文件中读取,并且不返回任何异常?
1条答案
按热度按时间ev7lccsx1#
您可以改用
getResourceAsStream
,如下所示:不需要在pom.xml文件中指定标记
<resources>
,只需要在运行mvn package
命令构建项目之前将文件放在src/main/resources
中即可。