1

我正在尝试构建我自己的实体,它基于 VanillaWindowsProcess。这个想法是,在安装windows机器之后,执行一些powershell命令,这些命令都在一个文件中。

我尝试了一些我在另一个 Java 项目中多次使用的东西来获取资源:

private void runInstallationScript() {
    List<String> lines;
    try {
        lines = FileUtils.readLines(
                new File(TalendWindowsProcessWinRmDriver.class.getResource("/my/path/file.txt").getFile()),
                "utf-8");
        executePsScript(lines);
    } catch (IOException e) {
        LOG.error("Error reading the file: ", e);
    }
}

但我总是得到以下信息:

ava.io.FileNotFoundException:文件'文件:/opt/workspace/incubator-brooklyn/usage/dist/target/brooklyn-dist/brooklyn/lib/dropins/myProject-0.0.1-SNAPSHOT.jar!/my/path/ file.txt' 不存在

这很奇怪,因为该文件位于该路径的 jar 中。我做了一个测试(没有 Apache Brooklyn 基础设施),它可以工作,但反过来却不行。

项目遵循Maven标准结构,文件本身在src/main/resources/my/path/file.txt下

有什么不对吗?或者也许有另一种方法来获取该文件?任何帮助,将不胜感激。

4

1 回答 1

0

您不能将 jar 内的资源作为File对象访问。您需要使用一个InputStream(或一个URL)来访问它。

由于您已经在使用getResource,您应该更改方法FileUtils.readLines以接受一个InputStream(或一个URL)作为输入。

如果您无权访问源代码,您可以编写自己的方法或Files.readAllLines用于 Java >= 7。

于 2015-09-23T08:39:45.057 回答