You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何调用new File(".").getAbsolutePath()得到的路径与项目位置不符?

问题原因

new File(".")获取的是JVM的当前工作目录,而非项目的根目录。这个工作目录由Eclipse的运行配置决定,默认情况下可能是你启动Eclipse时的所在路径(比如桌面),和项目实际存储路径没有直接关联。

解决方法

方法1:修改Eclipse运行配置的工作目录

  • 右键你的项目PuzzleApp → Run As → Run Configurations
  • 在弹出窗口中找到对应的Java应用程序配置(无配置则新建)
  • 切换到Arguments标签页,找到Working directory区域
  • 选择Other,点击右侧Workspace...按钮选中PuzzleApp项目;或直接手动输入项目绝对路径D:/WorkSpace/PuzzleApp
  • 点击Apply保存配置,重新运行程序即可

方法2:通过代码获取项目根目录(不依赖工作目录)

如果不想依赖Eclipse配置,可通过代码直接推导项目路径,避免受工作目录影响:

方式A:通过类加载器推导

// 获取当前类的编译输出路径(对应项目的bin或target目录)
String outputPath = YourMainClass.class.getProtectionDomain().getCodeSource().getLocation().getPath();
// 向上一级即为项目根目录
File projectRoot = new File(outputPath).getParentFile();
System.out.println(projectRoot.getAbsolutePath());

方式B:通过项目内资源文件定位

若项目根目录下有固定资源文件(比如config.properties),可通过资源加载路径推导:

// 加载项目根目录下的资源文件(需确保资源被正确编译到输出目录)
URL resource = YourMainClass.class.getClassLoader().getResource("config.properties");
if (resource != null) {
    File resourceFile = new File(resource.getFile());
    // 资源在项目根目录时,向上一级就是项目根(资源在子目录需调整getParent次数)
    File projectRoot = resourceFile.getParentFile();
    System.out.println(projectRoot.getAbsolutePath());
}

内容的提问来源于stack exchange,提问作者pure21_h

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 01:22:03