Eclipse中无法访问configuration.json文件,求路径解决方案
解决Eclipse中无法访问项目根目录下configuration.json的问题
我懂你碰到的麻烦了——Eclipse启动时默认的工作目录根本不是你的项目根目录,而是快捷方式所在的C:\Users\cmalik\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Eclipse,这就导致你用相对路径直接找configuration.json完全找不到。下面给你几个实用的解决办法:
方法1:修改Eclipse运行配置的工作目录
这是最直接的方案,让JVM启动时的工作目录指向你的项目根:
- 右键点击
myService.java或者你要运行的类,选择 Run As > Run Configurations... - 在弹出的窗口里找到对应的Java应用配置,切换到 Arguments 标签页
- 在 Working directory 区域,选择 Other,然后点击右侧的 Workspace... 按钮
- 从列表里选中你的
ProjectName项目,点击 OK - 点击 Apply 再 Run,此时
System.getProperty("user.dir")就会返回项目根目录,直接用new FileReader("configuration.json")就能正常读取文件了
方法2:使用类加载器读取资源文件
如果这个配置文件属于项目的资源文件,更推荐用类加载器读取,这种方式完全不受工作目录影响:
首先确保configuration.json被加入类路径——右键项目 > Build Path > Configure Build Path,在 Source 标签页点击 Add Folder,选中项目根目录,这样它就会被当作资源目录。然后用以下代码读取:
// 通过类加载器获取资源输入流 InputStream inputStream = getClass().getClassLoader().getResourceAsStream("configuration.json"); if (inputStream == null) { throw new FileNotFoundException("configuration.json not found in classpath"); } // 读取文件内容 BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); // 后续的读取逻辑...
这种方法不管是在Eclipse里运行,还是打包成Jar后运行,只要文件在类路径里就能读到,兼容性极强。
方法3:通过类文件路径推导项目根目录(不推荐,兼容性差)
如果你一定要用文件路径的方式读取,可以通过当前类的位置反向推导项目根,但这种方法依赖固定的项目结构,换环境可能失效:
// 获取当前类的编译后文件路径 String classPath = getClass().getProtectionDomain().getCodeSource().getLocation().getPath(); // 推导项目根目录(假设编译后的class在bin或target/classes目录下) File projectRoot = new File(classPath).getParentFile().getParentFile(); File configFile = new File(projectRoot, "configuration.json"); FileReader reader = new FileReader(configFile);
为什么原来的方法行不通?
System.getProperty("user.dir")返回的是JVM启动瞬间的工作目录,而你是从开始菜单的快捷方式启动Eclipse的,所以这个路径就是快捷方式所在的目录,和你的项目目录完全不沾边,自然找不到项目里的文件。
内容的提问来源于stack exchange,提问作者user3756799
相关产品推荐
相关产品推荐

