1

我需要能够从后端 java 控制器访问存储在 src/main/resources/styles 下的 Web 应用程序的 css 文件。我想用它们用 iText 创建 PDF 输出。

换句话说,我想做这样的事情:

CssFile cssFile1 = XMLWorkerHelper.getCSS(new FileInputStream("src/main/resources/styles/my.css"));

但是,我显然没有正确处理这个问题,因为我收到了这样的异常:

java.io.FileNotFoundException: styles\standard.css (The system cannot find the path specified)

如何在控制器中检索这些文件?

我试过这个,但它不起作用,同样的错误:

String rcp = econtext.getRequestContextPath();
CssFile cssFile1 = XMLWorkerHelper.getCSS(new FileInputStream(rcp + "src/main/resources/styles/my.css"));
4

2 回答 2

2

FileInputStream本地磁盘文件系统进行操作,所有相对路径都是相对于当前工作目录的,当前工作目录是在JVM启动时打开的本地磁盘文件系统文件夹。这绝对不是文件夹的根src/main/resources目录。

鉴于/src/main/resources可识别为类路径资源根目录的 Maven 文件夹结构,那么您只需将其作为类路径资源获取即可ClassLoader#getResourceAsStream()

InputStream input = getClass().getResourceAsStream("/styles/standard.css");
// ...

或者,如果该类可能打包在由不同类加载器加载的 JAR 中。

InputStream input = Thread.currentThread().getContextClassLoader().getResourceAsStream("styles/standard.css");
// ...

也可以看看:

于 2013-02-07T18:18:30.780 回答
-1

那是因为 JSF 是一个 Web 应用程序。现在移动styles/my.cssWEB-INF/styles/my.css 这确保您在控制器中访问的文件是 WebApp 的一部分

现在您可以使用

XMLWorkerHelper.class.getResourceAsStream("styles/my.css")
于 2013-02-07T18:21:07.400 回答