使用Java获取不同计算机上的资源

使用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 为什么文件的绝对路径比其他人的计算机多返回一个节点?你不应该因为这个原因依赖于文件的绝对路径,

在我的计算机中,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


为什么文件的绝对路径比其他人的计算机多返回一个节点?

你不应该因为这个原因依赖于文件的绝对路径,它完全取决于其他人运行代码的位置。在您的情况下,还有一个额外的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);