You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaFX程序如何打包为带可修改.txt依赖的.exe文件

实现方案

核心原理

所有打包进jar/exe包内部的文件都是只读的,运行时无法直接修改。要实现打包后可修改txt配置、字典文件,本质是把这类文件放到程序包外部的独立目录,程序运行时从相对路径读取外部文件,不要读取classpath内打包的资源。Launch4J完全支持该需求,不需要更换打包工具。

你之前的尝试没生效,核心问题有两个:一是代码里写的src/main/resources/text1路径仅在IDE开发环境有效,打包后不存在src目录,根本读不到对应文件;二是如果把txt打进jar包内部,本身就不支持运行时修改,和Launch4J的配置无关。


第一步:修正代码的文件读取逻辑

不需要修改的静态资源比如fxml文件,依然可以放在classpath资源目录下打包进jar;只有需要后续修改的txt文件,要改成读取程序运行目录下的外部文件,参考修正后的代码:

public class TestController {
    @FXML
    public Button text1Button;
    @FXML
    public Button text2Button;
    @FXML
    public TextArea textArea;

    public void printText1(ActionEvent actionEvent) {
        // 直接传文件名即可,不需要带资源路径
        List<String> lines=readFromFile("text1.txt");
        StringBuilder sb = new StringBuilder();
        lines.forEach(l->sb.append(l).append("\n"));
        textArea.setText(sb.toString());
    }

    public void printText2(ActionEvent actionEvent) {
        List<String> lines=readFromFile("text2.txt");
        StringBuilder sb = new StringBuilder();
        lines.forEach(l->sb.append(l).append("\n"));
        textArea.setText(sb.toString());
    }

    private List<String> readFromFile(String fileName){
        List<String> lines = new ArrayList<>();
        try{
            // 获取程序当前的运行目录
            String runDir = new File("").getAbsolutePath();
            // 统一把可修改的txt放在exe同级的config文件夹下,方便管理,可自定义路径
            Path filePath = Paths.get(runDir, "config", fileName);
            lines=Files.readAllLines(filePath, StandardCharsets.UTF_8);
        }
        catch (IOException ioe){
            ioe.printStackTrace();
        }
        return lines;
    }
}

第二步:打包配置(以Maven/Gradle + Launch4J为例)

  1. 先把JavaFX项目打包成包含所有依赖的可执行fat jar,打包时排除所有需要外部修改的txt文件,不要把这类文件打进jar包。如果用Maven,配置shade/jar插件时添加对应文件的排除规则即可。
  2. 在准备存放exe的发布目录下,新建config文件夹,把text1.txt、text2.txt这类需要后续修改的文件放进去。
  3. 打开Launch4J做常规配置:选择输出exe的路径、选择刚才打好的fat jar路径、配置匹配的JRE版本要求,不需要额外做资源绑定配置,直接生成exe即可。
    • 如果Launch4J配置为将jar内嵌到exe中,发布目录不需要单独放jar文件,只要保证config文件夹和exe同级就可以正常读取。
  4. 最终的发布目录结构如下:
    程序发布文件夹/
    ├─ 你的程序.exe
    └─ config/
        ├─ text1.txt
        ├─ text2.txt
    

后续要修改txt内容,直接编辑config文件夹下的对应文件即可,不需要重新编译打包程序。


可选优化

可以在程序启动时加一层校验:如果外部路径下的txt文件不存在,就自动从jar包内预置的默认模板复制一份到外部config目录,避免用户误删文件导致程序运行报错。


内容的提问来源于stack exchange,提问作者Zoltán Tóth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 06:27:24