如何在Java中使用相对路径读取Rooms.txt文件?
解决Java相对路径读取文件失败的问题
首先得明确:Java里的相对路径是相对于程序运行时的当前工作目录,不是你项目里的代码目录,这是大部分人踩坑的核心原因。给你几个靠谱的解决办法:
调整文件位置 + 检查运行工作目录
把Rooms.txt直接放在项目根目录(和src文件夹同级的位置)。如果用IDEA运行,打开「Run/Debug Configurations」,确认「Working directory」是项目根目录(一般默认是$PROJECT_DIR$,没问题就不用改)。这时候用Paths.get("Rooms.txt")就能正常读取文件了。用类加载器读取(推荐,适配打包后的程序)
如果是Maven/Gradle项目,或者以后要打包成Jar,把Rooms.txt放到src/main/resources目录下,然后用类加载器读取——这种方式不管是开发阶段还是打包成Jar后,都能稳定找到文件:URL resourceUrl = getClass().getResource("/Rooms.txt"); if (resourceUrl == null) { throw new FileNotFoundException("找不到Rooms.txt文件,请确认它在resources目录下"); } Path path = Paths.get(resourceUrl.toURI()); public Game() throws IOException { map = new ArrayList<Room>(); // 只读取一次文件,避免重复IO操作 List<String> allRoomLines = Files.readAllLines(path); String room1 = allRoomLines.get(1); String room1Desc = allRoomLines.get(2); }额外提一句:你之前每次取行都调用
Files.readAllLines(path),会重复读取整个文件,建议读一次存到List里复用,效率更高。基于当前工作目录构造路径
如果你想硬用Paths.get,可以通过系统属性获取当前工作目录再拼接路径,比直接写裸相对路径更稳妥:// 获取程序运行的当前工作目录 String workingDir = System.getProperty("user.dir"); Path path = Paths.get(workingDir, "Rooms.txt");
内容的提问来源于stack exchange,提问作者Will Screwdriver
相关产品推荐
相关产品推荐

