如何在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
相关产品推荐
相关产品推荐

