Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法使用相对路径从资源文件夹获取JSON文件_Java_Maven_Jar_Resources_Inputstream - Fatal编程技术网

Java 无法使用相对路径从资源文件夹获取JSON文件

Java 无法使用相对路径从资源文件夹获取JSON文件,java,maven,jar,resources,inputstream,Java,Maven,Jar,Resources,Inputstream,我正在尝试使用相对路径从主方法中的资源文件夹中获取JSON文件。代码使用绝对路径工作,但是一旦我从我想要的项目中构建了一个jar文件,这就会中断 public static void main(String[] args) throws FileNotFoundException { // Read in database db = Database.read(Thread.currentThread().getContextClassLoader().getResource("JSON/inh

我正在尝试使用相对路径从主方法中的资源文件夹中获取JSON文件。代码使用绝对路径工作,但是一旦我从我想要的项目中构建了一个jar文件,这就会中断

public static void main(String[] args) throws FileNotFoundException {
// Read in database
db = Database.read(Thread.currentThread().getContextClassLoader().getResource("JSON/inhabitants.json").toExternalForm());
names = db.getAllNames();
Read调用数据库中的一个方法,该方法使用inputstream读取文件

  public static Database read(String filename) throws FileNotFoundException {
    InputStream is = new FileInputStream(filename);
    Reader reader = new InputStreamReader(is);

    return gson.fromJson(reader, Database.class);
  }
我得到的错误如下:

java.io.FileNotFoundException: 文件:/Users/timpelser/IdeaProjects/turphapp/target/classes/JSON/incidents.JSON (没有这样的文件或目录)位于java.io.FileInputStream.open0(本机) 方法)在java.io.FileInputStream.open(FileInputStream.java:195)的 java.io.FileInputStream.(FileInputStream.java:138)位于 java.io.FileInputStream.(FileInputStream.java:93)位于 Main.Main(Main.java:51)处的Core.Database.read(Database.java:22)。。。 还有11个

目录
/Users/timpelser/IdeaProjects/turphapp/target/classes/JSON/incidents.JSON中的文件

但是确实存在,所以我不知道出了什么问题

以下是我的文件夹结构(Maven基本结构):

有没有一个解决方案仍然可以让我将其部署为jar文件

编辑(25/09):如果使用getResourceAsStream而不是getResource,则会出现以下错误:

Caused by: java.io.FileNotFoundException: java.io.BufferedInputStream@4f8e5cde (No such file or directory)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.io.FileInputStream.<init>(FileInputStream.java:93)
at Core.Database.read(Database.java:22)
at Main.main(Main.java:51)
... 11 more
原因:java.io.FileNotFoundException:java.io。BufferedInputStream@4f8e5cde(无此类文件或目录)
位于java.io.FileInputStream.open0(本机方法)
在java.io.FileInputStream.open(FileInputStream.java:195)
位于java.io.FileInputStream。(FileInputStream.java:138)
位于java.io.FileInputStream。(FileInputStream.java:93)
位于Core.Database.read(Database.java:22)
Main.Main(Main.java:51)
... 还有11个

您必须使用
getResourceAsStream
从正在运行的jar中读取文件(其中包含
src\main\resources
中的文件)

用这个

Resource resource = new classpathResource(json);

new ObjectMapper.readValue(resource.getInputStream(),Object.class);

仅供参考,为什么要将json文件放在目标文件夹中?目标是构建文件夹,每次执行
mvn clean
时都会被删除。我不是故意这样做的,我只是将文件添加到资源文件夹中,在构建工件时,它将其添加到目标文件夹中。我使用GetResourceStream收到一个未找到文件异常。我不知道您使用的是哪个开发环境。如果您在Eclipse中运行它,那么Eclipse应该像处理jar中的调用一样处理这个调用,但是jar中有什么呢?然后,查找转到类路径,
src\main\resources
必须位于类路径中!请检查您的场景中是否存在这种情况。(在Eclipse中右键单击
src\main\resources
->“构建路径”->“用作源文件夹”)我使用的是IntelliJ Ultimate Edition,资源设置为默认资源文件夹。我不知道IntelliJ中的确切名称,但您还必须确保
src\main\resources
位于类路径/源文件夹中!嗯,我不明白,因为类路径是src/main/resources,还是我不明白?