gpt4 book ai didi

java - 即使通过 context.getRealPath 获取路径,也未在 servlet 中找到文件?

转载 作者:行者123 更新时间:2023-11-28 22:31:44 25 4
gpt4 key购买 nike

概要

给定以下(删节的)代码,这些代码存在于 servlet 的服务器端(Tomcat 是容器)。这是一个 GWT 应用程序,尽管这应该无关紧要(我认为)。

ServletContext context = getServletContext();
String dataFilePath= context.getRealPath("/WEB-INF/dir/dataFile.txt");
File dataFile = new File(dataFilePath);

TestCaseGenerator testCaseGenerator = new TestCaseGenerator(dataFile);
testCaseGenerator.generateTestCase();

TestCaseGenerator 是项目的 war/WEB-INF/lib 文件夹中 jar 中的一个类,已作为外部库添加到 GWT 项目中。

问题

testCaseGenerator.generateTestCase() 被执行时,它无法使用 dataFile 来创建一个 new LineNumberReader(new FileReader(dataFile));,将抛出 FileNotFoundException

我已验证 dataFilePathString 值是正确的,并且包含我需要读取的服务器上文件的正确真实路径,以及dataFile 不是 null。我还验证了 TestCaseGenerator 在此 GWT 应用程序之外从命令行调用时运行良好。

我不确定为什么 TestCaseGenerator 不能使用我传递给它的 File 对象,考虑到我传递给它的是文件的真实文件路径.我可以想出一些替代解决方案来解决这个问题,但现在我真的很好奇为什么它找不到文件。

提前感谢您的任何见解。

最佳答案

已解决

我愚蠢地忽略了将 dir/dataFile.txt 包含在我的 build.xmlwar 目标中,所以实际上文件未包含在 war 包中,因此从未放置在 Tomcat 容器中。

<include name="dir/**" />

而且我还误解了 context.getRealPath("/WEB-INF/dir/dataFile.txt"); 实际返回的内容;。来自 ServletContext javadoc

Gets the real path corresponding to the given virtual path. For example, if path is equal to /index.html, this method will return the absolute file path on the server's filesystem to which a request of the form http://://index.html would be mapped, where corresponds to the context path of this ServletContext.

因此即使 getRealPath 返回一个路径值,它并不一定意味着该文件位于该实际路径中。

关于java - 即使通过 context.getRealPath 获取路径,也未在 servlet 中找到文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14365777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com