IDEA 获取当前类路径下的文件报错:NullPointerException

本文介绍了在IDEA中遇到尝试获取当前类路径下lisi.json文件时,由于文件实际位置不在运行时加载的类路径中导致NullPointerException的错误。错误原因是类在运行时动态加载,其对应的文件夹不含所需文件。为解决此问题,文章提出了通过获取项目绝对路径并指定json文件位置的方法来正确读取文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文件目录:

文件目录

目标

在ReadJsonSample中获取lisi.json 文件中的内容

错误原因

一开始我是用
File file = new File(ReadJsonSample.class.getResource("/lisi.json").getFile());
但是IDEA总是报错

Exception in thread "main" java.lang.NullPointerException
    at com.xxxx.demo.json.ReadJsonSample.main(ReadJsonSample.java:32)

原因是我在代码中使用了ReadJsonSample.class.getResource方法,而ReadJsonSample.class这个类是在运行时动态加载的,这个class文件保存在另外的文件夹中,这里写图片描述
而这个文件夹中是没有我需要的lisi.json文件的,因此找不到该文件。

解决方法

先获取项目在计算机中的绝对路径A,然后在A的基础上指定json文件

File directory  = new File("");
File file = new File(directory.getCanonicalPath()+
    "/src/main/java/com/xxxx/demo/json/lisi.json");

参考

java中获取类加载路径和项目根路径的5种方法

C:\Users\86178\.jdks\openjdk-23.0.2\bin\java.exe --module-path C:\Users\86178\Downloads\openjfx-17.0.14_windows-x64_bin-sdk\javafx-sdk-17.0.14\lib --add-modules javafx.controls,javafx.fxml "-javaagent:D:\javakaifa\IntelliJ IDEA Community Edition 2024.2.4\lib\idea_rt.jar=60116:D:\javakaifa\IntelliJ IDEA Community Edition 2024.2.4\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath D:\javakaifa\tank\out\production\tank;C:\Users\86178\Downloads\openjfx-17.0.14_windows-x64_bin-sdk\javafx-sdk-17.0.14\lib\javafx.controls.jar;C:\Users\86178\Downloads\openjfx-17.0.14_windows-x64_bin-sdk\javafx-sdk-17.0.14\lib\javafx.base.jar;C:\Users\86178\Downloads\openjfx-17.0.14_windows-x64_bin-sdk\javafx-sdk-17.0.14\lib\javafx.graphics.jar;C:\Users\86178\Downloads\openjfx-17.0.14_windows-x64_bin-sdk\javafx-sdk-17.0.14\lib\javafx.fxml.jar;C:\Users\86178\Downloads\openjfx-17.0.14_windows-x64_bin-sdk\javafx-sdk-17.0.14\lib\javafx-swt.jar;C:\Users\86178\Downloads\openjfx-17.0.14_windows-x64_bin-sdk\javafx-sdk-17.0.14\lib\javafx.media.jar;C:\Users\86178\Downloads\openjfx-17.0.14_windows-x64_bin-sdk\javafx-sdk-17.0.14\lib\javafx.swing.jar;C:\Users\86178\Downloads\openjfx-17.0.14_windows-x64_bin-sdk\javafx-sdk-17.0.14\lib\javafx.web.jar Main Exception in Application start method java.lang.reflect.InvocationTargetException at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:118) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:465) at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:364) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1164) Caused by: j
最新发布
03-13
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值