0

我正在围绕独立 JAR 应用程序构建 Web 应用程序。本质上,JAR 应用程序读取输入文件,对其进行处理并生成输出文件。

输入文件是这样放置的,就在 JAR 旁边。

在此处输入图像描述

JAR 应用程序的代码如下所示。

public class FileReadWriteApp {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    try {

        File inFiles = new File("../inputFiles");
        if (!inFiles.exists()) {
            if (inFiles.mkdirs()) {
                System.out.println("Input directory is created!");
            } else {
                System.out.println("Failed to create input directory!");
            }
        }
        Path inputPath = FileSystems.getDefault().getPath("testInput.txt", new String[0]);
        Files.copy(inputPath, new FileOutputStream("../inputFiles/testInput.txt"));

        String content = new String(Files.readAllBytes(inputPath));
        String parsedInput = content.toUpperCase();

        new File("../outputFiles").mkdirs();
        Files.write(Paths.get("../outputFiles/testOutput.txt"), parsedInput.getBytes());

    } catch (IOException exc) {
        System.out.println(exc);
        System.exit(1);
    }
}

在命令提示符下执行 JAR 后,它成功创建了比 JAR 文件高一级的 inputFiles 和 outputFiles 文件夹,并正确放置了相应的输入/输出文件。

在此处输入图像描述

但是,当我将 JAR 作为依赖项添加到我正在构建的基于 Spring 的 Web 应用程序中并将输入文件和 JAR 文件放在同一位置时,它无法访问输入文件。

在 Spring Web 应用程序中,我放置了输入文件和 JAR 文件,如下所示:

在此处输入图像描述

我什至可以看到它们出现在 lib 目录的 Target 文件夹中,如下所示:

在此处输入图像描述

在我的 Spring Controller 方法中,我正在执行main()JAR 文件的方法,如下所示:

String[] args = new String[] { "" };
filereadwriteapp.FileReadWriteApp.main(args);

但是,在控制台中我看到这些消息:

Input directory is created!
java.nio.file.NoSuchFileException: testInput.txt

我无法理解为什么应用程序找不到文件testInput.txt

有人可以指导我解决这个问题吗?

是否有一些我应该放置testInput.txt文件的特定位置,以便“依赖”JAR 文件可以访问它?

请注意,我不是从 Web 应用程序中的 WEB-INF 目录加载资源。就我而言,我遇到了“依赖”JAR 从相对路径加载资源到自身的问题。

在这方面的任何帮助将不胜感激。

4

1 回答 1

0

FileSystems api 返回不同的路径,因此您需要使用类路径来获取文件,如下所示

ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("testInput.txt").getFile());
于 2015-10-06T02:13:21.030 回答