如何在Java中读取具有相对路径的文件?
我有一个文件如何在Java中读取具有相对路径的文件?,java,file,Java,File,我有一个文件users.txt,文件路径为myPlugin/impl/src/main/resources/myPlugin/impl/src/main/java/com/company/myPlugin/impl/users.txt。我试图从文件路径为myPlugin/impl/src/main/Java/com/company/myPlugin/impl/UserManager的Java类访问此文件。我不想硬编码路径,因为工作目录将更改。我确实试过: String path = System
users.txt
,文件路径为myPlugin/impl/src/main/resources/myPlugin/impl/src/main/java/com/company/myPlugin/impl/users.txt
。我试图从文件路径为myPlugin/impl/src/main/Java/com/company/myPlugin/impl/UserManager的Java类访问此文件。我不想硬编码路径,因为工作目录将更改。我确实试过:
String path = System.getProperty("user.dir") + .....path to users.txt;
问题是,只有当我在本地运行插件时,它才起作用。当它部署在另一台机器或服务器上时,工作目录不会包含所有文件。我真正需要的是一种只使用myPlugin
中的相对路径打开文件的方法。我也试过了
URL path = getClass.getResource("");
然后添加路径的其余部分,但这也不起作用。甚至可以只使用不依赖于当前工作目录的相对路径吗?在服务器上运行插件时,工作目录不包含源代码或目录结构。文件位置由两部分组成:myPlugin/impl/src/main/resources/
和users.txt
。第一个是构建系统(Maven)查找资源的位置。第二个是你的实际资源
myPlugin/impl/src/main/resources
下的所有内容(包括文件和目录)都将复制到类路径中
要回答您的问题,您的文件应该可以通过
getClass().getClassLoader().getResource("users.txt");
你会使用maven来构建你的应用程序吗?你能确认它是否是一个web应用程序吗?我使用maven,不,它不是一个web应用程序。一个小小的观察:这是假设文件在类路径上的位置与调用getClass().getResource()的位置在同一个包中。如果我看到这个问题,情况就不是这样了getClass().getClassLoader().getResource()
可能是更好的建议,但这在理论上似乎是可行的,但事实并非如此。它生成的路径是“/target/class”目录中的正确路径,但程序找不到该文件。@Gimby由于资源位于默认包中,因此必须进行更正。谢谢。哦,等等-那是什么impl
目录?您通常会有myPlugin/src/main/resources
可能您需要myPlugin/src/main/resources/impl/users.txt
?我认为(未经测试)getClass.getResource(“/users.txt”)
也可以工作(从类路径的根搜索)。