java - .jar 在 args 中传递有效文件时未运行
问题描述
我正在构建一个应用程序,它通过 XML 文件接受输入并基于它执行许多操作。我知道该应用程序可以正常工作,因为我可以直接在代码中为 XML 提供一个文件,它会按应有的方式运行。
当我尝试通过打包的 .jar 的命令行参数传递 XML 文件的路径时,就会出现问题。
我的主要看起来像这样:
public static void main(String[] args) {
LogWriter.openWriter();
LogWriter.log("Main start.");
Controller controller = new Controller();
LogWriter.log("Controller created.");
List<Parameters> parameters = new ArrayList<Parameters>();
for (int i = 0; i < args.length; i++) {
LogWriter.log("Got arg: " + args[i]);
File file = new File(args[i]);
LogWriter.log("Parameter file: " + file.getAbsolutePath());
if (file.exists()) {
LogWriter.log("File exists. Getting parameters.");
Parameters para = controller.getParameters(file);
LogWriter.log("Attempting to add parameters.");
parameters.add(para);
LogWriter.log("Added parameters.");
} else {
LogWriter.log("File is not valid.");
}
}
}
我用来运行它的脚本如下所示:
java -jar PDFRedacter.jar C:\Users\je\Downloads\XMLConfig.xml
真正奇怪的是,只有当我给它一个有效文件时它才会失败。如果我提供了一个无效的文件,它就会运行,并记录该文件是无效的,并且如上所述,如果我直接在代码中输入一个有效的文件,它也会运行。
但是,如果在批处理中写入了有效路径,甚至不会记录第一个“主启动”,因此代码根本不会运行。这可能是一些访问问题吗?
编辑:记录器不是我的问题,无论有没有有效文件,它都能按预期工作。“无效文件”日志示例:
主要开始。
控制器创建。
得到 arg:C:\Users\je\Downloads\XMLConfig
参数文件:C:\Users\je\Downloads\XMLConfig
文件无效。
澄清一下,问题实际上并不是在读取文件。问题是,当我通过批处理脚本提供有效文件时,我的代码似乎根本没有运行。
最终编辑:事实证明,问题只是我的 .jar 的包装,缺乏依赖性。正如其他人所建议的那样,我的记录器仅在执行结束时刷新,这就是它没有写任何东西的原因。感谢您的意见。
解决方案
正如 Thomas 所怀疑的那样,程序失败一定有另一个原因,因为您的函数应该可以工作。如果你把它简化为检测文件是否存在,一旦你让舒尔它工作,一个接一个地添加参数列表、控制器和记录器,你可能会找到失败的原因。'
这是我测试的示例 - 它适用于所有现有文件或目录。
public static void main(String[] args) {
for (int i = 0; i < args.length; i++) {
System.out.println("Got arg: " + args[i]);
File file = new File(args[i]);
System.out.println("Parameter file: " + file.getAbsolutePath());
if (file.exists()) {
System.out.println("File exists. Getting parameters.");
} else {
System.out.println("File is not valid.");
}
}
}
推荐阅读
- angular - 如何使用输入标签将图像上传到角度组件?
- r - R用新值替换子字符串
- rust - 使用来自 Rust 动态库的损坏的 Rust 函数
- disabled-control - Apache Royale : equivalent of enabled property on j:Button
- php - 如何在没有 PHP 输入标签的情况下通过 POST 向其他页面发送值
- python - Heroku 需求文件中的许多项目
- javascript - jQuery ajax 到 vanila
- docker - 在容器中查找文件
- javascript - 如何使用适用于 Chrome 的 JavaScript 将 createScriptProcessor 替换为 AudioWorklet
- pentaho - Pentaho 数据集成将许多行值反规范化为字段名称