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

如何在Java程序中调用AxCrypt命令实现本地文本文件加密

代码实现方案

Java调用外部系统命令推荐使用ProcessBuilder实现,可避免Runtime.exec()常见的参数空格解析错误、进程阻塞等问题。完善后的代码如下:

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.File;

public class TestCode {
    
    // AxCrypt软件安装目录
    private static final String AXCRYPT_LOCATION = "C:\\Program Files\\Axantum\\AxCrypt";
    // 待加密源文件路径
    private static final String FILE_IMPORT_LOCATION = "E:\\ImportExport\\firstcheck.txt";
    // 加密后文件导出目录
    private static final String FILE_EXPORT_LOCATION = "E:\\ImportExport\\";

    public static void main(String[] args) {
        // 按cmd执行的正确顺序拆分命令参数,避免空格解析错误
        String[] fullCommand = {
            "AxCrypt.exe",
            "-e",
            "-k",
            "X2U4qPtdMTMZ K63D ABnS 3gO2 PHFL XKJ/ +UsZ /QuG yp5s X78k 2wH=",
            "-z",
            FILE_IMPORT_LOCATION
        };

        ProcessBuilder processBuilder = new ProcessBuilder(fullCommand);
        // 设置工作目录为AxCrypt安装目录,确保能识别AxCrypt.exe
        processBuilder.directory(new File(AXCRYPT_LOCATION));
        // 加密后的文件默认输出到源文件同目录,若需自定义导出路径可根据AxCrypt版本加对应参数,例如添加"-o", FILE_EXPORT_LOCATION+"encrypted.txt"到命令数组
        processBuilder.redirectErrorStream(true);

        Process process = null;
        try {
            process = processBuilder.start();
            // 读取进程输出,避免缓冲区占满导致进程挂起
            printProcessOutput(process.getInputStream());
            // 等待加密执行完成,获取退出码
            int exitCode = process.waitFor();
            if (exitCode == 0) {
                System.out.println("文件加密成功,已存储到:" + FILE_EXPORT_LOCATION);
            } else {
                System.out.println("文件加密失败,进程退出码:" + exitCode);
            }
        } catch (IOException e) {
            System.out.println("调用AxCrypt进程出错:" + e.getMessage());
            e.printStackTrace();
        } catch (InterruptedException e) {
            System.out.println("加密进程被中断:" + e.getMessage());
            Thread.currentThread().interrupt();
        } finally {
            if (process != null) {
                process.destroy();
            }
        }
    }

    /**
     * 读取并打印AxCrypt进程的输出日志
     */
    private static void printProcessOutput(InputStream inputStream) throws IOException {
        try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "GBK"))) {
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println("进程日志:" + line);
            }
        }
    }
}
注意事项
  • 命令参数顺序请和你本地cmd执行成功的命令保持完全一致,若需指定自定义输出文件名,可查阅你安装的AxCrypt版本对应的参数规则,在命令数组中补充输出路径参数即可。
  • 密钥参数不需要额外加转义双引号,ProcessBuilder的每个数组元素都会被识别为独立参数,不会被空格拆分。
  • 执行前请确认Java进程有读取源文件、写入导出目录、调用AxCrypt程序的系统权限。

内容的提问来源于stack exchange,提问作者Waseem

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:39:02