这是我的项目结构:
这是我的代码,尝试读取资源文件夹中的文件:
package passgen;
public class Application {
public static void main(String[] args) {
System.out.println(Application.class.getResourceAsStream("/configuration.properties"));
System.out.println(Application.class.getResource("/configuration.properties"));
System.out.println(Application.class.getClassLoader().getResourceAsStream("/configuration.properties"));
System.out.println(Application.class.getClassLoader().getResource("/configuration.properties"));
System.out.println(new Application().getClass().getResourceAsStream("/configuration.properties"));
System.out.println(new Application().getClass().getResource("/configuration.properties"));
System.out.println(new Application().getClass().getClassLoader().getResourceAsStream("/configuration.properties"));
System.out.println(new Application().getClass().getClassLoader().getResource("/configuration.properties"));
System.out.println(Application.class.getResourceAsStream("configuration.properties"));
System.out.println(Application.class.getResource("configuration.properties"));
System.out.println(Application.class.getClassLoader().getResourceAsStream("configuration.properties"));
System.out.println(Application.class.getClassLoader().getResource("configuration.properties"));
System.out.println(new Application().getClass().getResourceAsStream("configuration.properties"));
System.out.println(new Application().getClass().getResource("configuration.properties"));
System.out.println(new Application().getClass().getClassLoader().getResourceAsStream("configuration.properties"));
System.out.println(new Application().getClass().getClassLoader().getResource("configuration.properties"));
}
结果都是空的:
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
将“配置属性”替换为“src/主/资源/配置属性”(带斜杠和不带斜杠)没有任何区别。
其他类似的答案告诉您使用.getClass().getClassLoader()。getResource(fileName)
,但这已经是其中一行了。为什么它们都为空,我如何获得资源?
采购订单:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>passgen</groupId>
<artifactId>passgen</artifactId>
<version>1</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<build>
<finalName>passgen</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<targetPath>${project.build.directory}/dist</targetPath>
<includes>
<include>**/*<!-- all resources that go to folder, rest will go into the jar --></include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>**/*<!-- all resources that go to folder, rest will go into the jar --></exclude>
</excludes>
</resource>
</resources>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<configuration>
<outputDirectory>${project.build.directory}/dist</outputDirectory>
<archive>
<manifest>
<!-- <addClasspath>true</addClasspath> -->
<mainClass>
passgen.Application
</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
找到答案了。出于某种原因,Eclipse在主/java/resources文件夹中放置了一个排除模式“< code>**”。如果其他人有同样的问题:右击项目-
编辑:出于某种原因,Eclipse在您运行Maven时将**
的排除模式添加到src/main/资源文件夹-
编辑2:我发现Eclipse在src/main/资源文件夹上的排除模式是正常的(参见这个答案)。排除意味着不是Eclipse处理src/main/Resources文件夹编译,而是Maven(准确地说,是Eclipse的Maven插件,M2Eclipse)。在类路径中找不到这些资源的事实是由于pom.xml中存在的排除:
<resource>
<directory>src/main/resources</directory>
<excludes>
<!-- these resources will be excluded from the classpath; they will not go in to the target/classes folder and will not be packaged into the artifact -->
<exclude>**/*</exclude>
</excludes>
</resource>
我删除了它,得到了下面列出的输出。
现在,上述代码的输出如下:
java.io.BufferedInputStream@7852e922
file:/C:/Users/Taiano/eclipse-workspace/sharedProjects/passgen/target/classes/configuration.properties
null
null
java.io.BufferedInputStream@4e25154f
file:/C:/Users/Taiano/eclipse-workspace/sharedProjects/passgen/target/classes/configuration.properties
null
null
null
null
java.io.BufferedInputStream@70dea4e
file:/C:/Users/Taiano/eclipse-workspace/sharedProjects/passgen/target/classes/configuration.properties
null
null
java.io.BufferedInputStream@5c647e05
file:/C:/Users/Taiano/eclipse-workspace/sharedProjects/passgen/target/classes/configuration.properties
如果要从 jar 中排除资源,请在“专家-jar-插件”部分中将其排除。如果要在输出中生成从 jar 中排除的资源,请使用指定目标文件夹的目标复制资源配置 maven-resources 插件(默认情况下,资源被打包到项目中,如果您只是从项目中排除它们,您将无处可去的资源)。
您必须提供类装入器的完整路径,以防您想从项目目录中装入它。
System.out.println(Application.class.getResourceAsStream("/main/resources/configuration.properties"));
希望这有帮助。
我在中有一个JSON文件,我试图用以下方式读取该文件: 但是,InputStream为空。 这是我传递的文件路径: 我做错了什么?
我想读一个属性文件,如下所示: 但当我尝试这样做时,我会出现一个错误: 线程“main”java中出现异常。lang.NullPointerException:inStream参数在java中为null。base/java。util。物体。java上的requirennoull(Objects.java:246)。base/java。util。财产。在majorbot加载(Properties.j
错误: 代码: 我需要插入完整的文件到setRuleSets方法,如何将FileInputStream帮助我在这里? 我应该通过读取fileinput流并将该文件路径传递给方法来重新创建临时文件吗?
我知道为什么会出现错误:这是因为我想读取数据的表(Htest)为null。 我检查了我的excel,有一张正确名称为“htest”的表。 我还检查了工作簿中的工作表数。它返回工作簿的正确页数 我不知道为什么工作簿中的工作表是可用的,但代码返回null??我错过了什么?有人有同样的问题吗?或者你能给我一个提示来使用它吗? 谢谢你。 错误是:
我得到这个问题: 这就是它指向的地方 我正在尝试制作一个后端有express,前端有Webpack的应用程序。我在后端有一个Rest API,不能在前端使用。 我将Ubuntu与Mozilla Firefox 66.0.2和Nodejs 11.13.0结合使用 当我使用控制台时,它说问题出在它上面
我试图分块读取输入流并写入文件以避免内存问题,我接收json格式的数据,并使用以下代码写入文件。 我的问题是,大多数json都写得很好,虽然其中一些包含损坏的数据,但我不确定我是否正确地将CharBuffer与BufferedReader一起使用,我观察到的另一件事是,对于少量数据,它正确地将CharBuffer写入文件,当我从服务器接收到更大的数据(大约2MB的输入流-不是很大)时,我通常会遇到