记录贴:Runtime.getRunTime.exec() 读取.exe生成内容
问题:
- 双击exe文件时在同级目录生成了一个license_reg的注册文件。
- 使用runtime.exec()时并没有生成。
目标:
生成license_reg文件
解决方案一:
- 先使用cmd运行
Register.exe
文件,发现并没有生成license_reg,但是发现在控制台输出了两行32长度的字符串,看编码格式并非16进制字符,而是类似BASE64或者两个MD5摘要,怀疑Register.exe
- 在代码中使用getInputStream获取到了上述的字符串,解决方案一:手动截取字符串输出至File中
解决方案二:
- 怀疑已经生成了license_reg但是位置不对,使用Everything全局查找。确实发现了license_reg
- 重新查看runtime.exec()函数源码注释,发现可以通过workpath实现,设置workpath后,确实在工作目录下找到了license_reg
- 直接使用cmd时,生成的文件在C:\Users\Admin 默认cmd打开时路径。
- 编译器中的工作路径由项目路径所影响,可修改
Working directory
Runtime runtime = Runtime.getRuntime();
// 通过设置workPath更改license_reg
String register = DllConstant.OCR_DLL_DIR + "Register.exe";
Process p = runtime.exec(register, null, new File(DllConstant.OCR_DLL_DIR));
//取得命令结果的输出流
InputStream fis = p.getInputStream();
//用一个读输出流类去读
InputStreamReader isr = new InputStreamReader(fis);
//用缓冲器读行
BufferedReader br = new BufferedReader(isr);
String line = null;
//直到读完为止
while ((line = br.readLine()) != null) {
System.out.println(line);
}