java相关问题,求解答

我用java编写了一个程序,可以在当前目录下生成一个文件并写入一些数据(使用的相对路径),但当导出为jar包后,生成的文件在哪里啊,想要读取生成的数据应该怎么做呢?

这里就涉及到程序的三种路径
1.文件目录
2.启动目录
3.工作目录
文件目录是你exe文件的位置,只要你不去挪动它,它就不会变;
启动目录,如果你双击exe启动,那么它和exe目录相同,而如果你从外部调用exe,那么启动目录是外部进程的路径
工作目录最初是启动目录,但当你使用了openfiledialog之类的插件让用户选择目录后,工作目录会改变
还有重要的第4点:相对路径是相对于谁的路径呢,其实是相对于工作目录的路径
-=-=-=
那么回到你的问题
你的程序以exe运行时,工作目录和文件目录一致,所以生成的文件就跟exe在一个目录下
如果你以jar包的方式在工作,那么工作目录是跟引用jar包的exe文件位置相关,而且与它是否执行了修改工作目录的操作相关
所以尽量先用代码获取文件目录,再拼接,而不要直接使用相对路径
如果你写的是网站,那么网站其实也分相对路径和绝对路径,网站的绝对路径可以直接找到网站的根目录,而无需你去找文件的物理位置
如果你写的是exe,那么exe是没有根目录一说的,你必须先找到文件的物理位置

  • 关于该问题,我找了一篇非常好的博客,你可以看看是否有帮助,链接:Java测试类相关
  • 参考GPT的内容和自己的思路:

  • 当你将程序打包为JAR文件后,生成的文件将会被包含在JAR文件中。这意味着你不能直接访问生成的文件,因为它们被压缩在JAR文件中,而且JAR文件是只读的。

  • 如果你想要读取生成的数据,你需要将文件的内容读取到内存中,而不是直接从磁盘中读取。你可以使用Java的类加载器来读取JAR文件中的资源。
  • 以下是读取JAR文件中资源的代码示例:
InputStream inputStream = getClass().getResourceAsStream("/path/to/file.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line = null;
while ((line = reader.readLine()) != null) {
    // 处理文件内容
}
reader.close();


  • 在这个例子中,你需要将/path/to/file.txt替换为你实际生成的文件的相对路径。注意,路径应该以斜杠/开头,这是因为在JAR文件中路径是相对于根目录的。
  • 使用getClass().getResourceAsStream()方法可以获取JAR文件中的资源作为输入流。你可以将该输入流传递给一个BufferedReader,然后逐行读取文件的内容。
  • 在使用完输入流后,必须关闭该流以释放资源。