java - 在 args 中传递有效文件时,.jar 未运行

标签 java batch-file input jar

我正在构建一个应用程序,该应用程序通过 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

真正奇怪的是,只有当我给它一个有效的文件时它才会失败。如果我提供无效文件,它就会运行,并记录该文件无效,并且如上所述,如果我直接在代码中输入有效文件,它也会运行。

但是,如果在批处理中写入有效路径,则甚至不会记录第一个“Main start”,因此代码根本不会运行。这可能是一些访问问题吗?

编辑:记录器不是我的问题,无论有没有有效文件,它都按预期工作。 “无效文件”日志示例:

Main start.
Controller created.
Got arg: C:\Users\je\Downloads\XMLConfig
Parameter file: C:\Users\je\Downloads\XMLConfig
File is not valid.

澄清一下,问题实际上并不是读取文件。问题是,当我通过批处理脚本提供有效文件时,我的代码似乎根本不运行。

最终编辑: 事实证明,问题只是出在我的 .jar 的打包上,缺少依赖关系。正如其他人所建议的,我的记录器仅在执行结束时刷新,这就是为什么它没有写入任何内容。感谢您的评论。

最佳答案

正如托马斯所怀疑的,程序失败肯定还有另一个原因,因为你的函数应该可以工作。如果您将其简化为检测文件是否存在,并且一旦确定其工作正常,依次添加参数列表、 Controller 和记录器,您可能会找到失败的原因。´

这是我测试的示例 - 它非常适合所有现有文件或目录。

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.");
        }
    }
}

关于java - 在 args 中传递有效文件时,.jar 未运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52272873/

相关文章:

SVN 使用批处理文件获取今天的日志。

java - 捕获异常时无法继续循环

java - 我如何告诉 IntelliJ 使用 Java 1.6 JDK 启动 gradle?

Tomcat 无法启动,未提供任何错误 (Windows 7)

javascript - 如何使输入在焦点上有文本?

ruby - 如何在命令行中使用 < 读取 ruby​​ 中的输入文件?

html - 如何使输入文本栏透明但保持文本在里面?

java - 无法解析帮助​​程序类中的 getSupportFragmentManager()

JavaFX ImageView 旋转改变拖放

batch-file - 批处理 - 删除文件夹