【问题标题】:How to Write Output Files from a JAR Program to Directory Outside the JAR?如何将 JAR 程序的输出文件写入 JAR 外部的目录?
【发布时间】:2021-05-13 14:52:19
【问题描述】:

tl;dr 我更习惯于编写只能基于当前工作目录输出的命令行脚本,所以我不确定在将从 JAR 启动的程序中使用哪个目录来输出文件.

节目说明:

我的程序根据程序其余部分提供的数据构建一个 HTML 文件,然后应该将其写入一个为简单起见我们称之为“Output.html”的文件。

相关代码:

public void outputHTML()
{
    String output = buildHTML();
    
    // Expanded to explain my confusion better
    String fileDirectory = ""; // ???
    String fileName = "Output.html";
    
    String fullPath = fileDirectory + "\\" + fileName;
    
    try (BufferedWriter writer = new BufferedWriter(new FileWriter(fullPath)))
    {
        writer.write(output);
        writer.close();
    } catch (IOException e)
    {
        System.out.println("File not found.");
        e.printStackTrace();
    }
}

问题

我不知道将文件目录放在什么位置。通常我从命令行运行我的程序并使用“.\\Output.txt”作为我的输出路径,但如果它是从 JAR 运行的,我不知道该放在哪里。

所需的文件结构如下:

  • 包含文件夹
    • Program.jar
    • 输出
      • Output.html

或者(不确定这是否更容易理解或更难):

  • 主要\
    • main\Program.jar
    • 主\输出\
      • main\output\Output.html

我在 SE 上可以找到的所有内容都只与 读取 文件有关,这些文件既是 immutable 又是 internal,但我正在尝试输出一个非静态文件到我的 jar 之外的位置。

有人可以帮忙吗?谢谢!

其他详细信息

我目前正在使用没有 Gradle 的 Eclipse,因为我不知道 Gradle 是什么,而且新事物很可怕。如果使用 Gradle 更容易解决这个特定问题,请告诉我,我会查找更多相关信息。

编辑:

  • 为代码块添加了语法高亮。
  • 格式化一切都好一点
  • 将标题更改为更具描述性

【问题讨论】:

    标签: java eclipse file io


    【解决方案1】:

    您可以使用绝对路径:例如fileDirectory = "\\project\\test\\main\\output";
    即使在 Windows 上也可以使用普通斜线 ("/project/test/main/output")

    或使用相对路径 - 这将从当前工作目录(用户目录)开始,即 JVM 启动所在的目录 - 例如fileDirectory = "main\\output";

    【讨论】:

    • jar 程序的工作目录到底是什么?我只想过在命令行中可以使用工作目录,而不是在从可执行文件等运行程序时使用。
    • "启动 JVM 的那个"——即执行 javajava.exe 的目录。您可以打印System.getProperty("user.dir") 的结果以查看它是什么。 “从可执行文件运行”?
    • 好的,这样写输出文件肯定不是一个好的约定,对吧?我不想将我的文件写入用户的 PATH 大声笑。对于最后一点,我(错误地?)将 jar 文件和可执行文件混为一谈,因为我一直认为它们是相似的。
    • 现在想想,有没有办法获取jar的绝对目录并使用它跳转?
    • 在正常情况下双击 JAR(取决于系统)时,JAR 所在的目录是工作目录。获取绝对路径new File("").getAbsolutePath()
    猜你喜欢
    • 2012-05-27
    • 2020-10-17
    • 2014-10-08
    • 2011-05-24
    • 2014-10-21
    • 2011-02-11
    • 2010-10-02
    • 2017-06-08
    • 2014-09-27
    相关资源
    最近更新 更多