使用Java获取不同计算机上的资源
在我的计算机中,file.getAbsolutePath()返回使用Java获取不同计算机上的资源,java,java-io,Java,Java Io,在我的计算机中,file.getAbsolutePath()返回 D:\Dev\Tool\MessageCompare\MessageCompare\src\main\resources\json\test.json 在其他计算机中,file.getAbsolutePath()返回 D:\Dev\Tool\MessageCompare\src\main\resources\json\test.json 为什么文件的绝对路径比其他人的计算机多返回一个节点?你不应该因为这个原因依赖于文件的绝对路径,
D:\Dev\Tool\MessageCompare\MessageCompare\src\main\resources\json\test.json 在其他计算机中,file.getAbsolutePath()返回
D:\Dev\Tool\MessageCompare\src\main\resources\json\test.json
为什么文件的绝对路径比其他人的计算机多返回一个节点?你不应该因为这个原因依赖于文件的绝对路径,它完全取决于其他人运行代码的位置。在您的情况下,还有一个额外的MessageCompare目录 相反,请使用类加载器加载文件:
MyClass.class.getResourceAsStream(“/myFile.txt”)代码>
这样,您的代码将更易于移植
private static final String FILE_PATH = "MessageCompare\\src\\main\\resources\\json\\test.json";`
File file = new File(FILE_PATH);
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file.getAbsolutePath())));`
此行创建一个文件。文件的路径取决于项目文件夹和设置。如果您的工作站中包含另一个名为“MessageCompare”的文件夹,并且您的项目设置在该文件夹中,则这可能是您获得额外节点的原因 最好使用相对路径来保证跨平台
通常,获取资源有两种方式:
getClass().getResourceAsStream()&xxx.Class.getResourceAsStream()
getClass().getClassLoader().getResourceAsStream()&xxx.Class.getClassLoader().getResourceAsStream()
有什么区别?
关于#1,它使用:
InputStream in=getClass().getResourceAsStream(“/json/rti.json”)李>
对于#2,它使用:InputStream in=getClass().getClassLoader().getResourceAsStream(“json/rti.json”)李>
检查两台计算机上的文件夹结构。我认为您的工作区是以两种不同的方式设置的。您的路径不是绝对的,因此它将根据当前的工作目录进行解析,这可能会有所不同。
File file = new File(FILE_PATH);