Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中读取具有相对路径的文件?_Java_File - Fatal编程技术网

如何在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”)
也可以工作(从类路径的根搜索)。