为何调用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
相关产品推荐
相关产品推荐

