给出以下(删节)代码,它位于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
会被抛出。
我已经验证String
的{{1}}值是正确的,并且包含我需要读取的服务器上文件的正确实际路径,以及dataFilePath
isn 't dataFile
。我还验证了null
在从GWT应用程序之外的命令行调用时运行正常。
我不确定为什么TestCaseGenerator
无法使用我传递的TestCaseGenerator
对象,因为我正在传递文件的真实文件路径。我可以提出一些替代解决方案来解决这个问题,但现在我真的很好奇为什么它无法找到该文件。
提前感谢任何见解。
答案 0 :(得分:0)
我愚蠢地忽略了将dir/dataFile.txt
包含在build.xml
的{{1}}目标中,所以实际上该文件未包含在war
包中,并且因此永远不会放在Tomcat容器中。
war
我也误解了<include name="dir/**" />
实际的回报;来自ServletContext javadoc
获取与给定虚拟路径对应的真实路径。对于 例如,如果path等于/index.html,则此方法将返回 请求的服务器文件系统上的绝对文件路径 形式为http://://index.html 映射,其中对应于此的上下文路径 ServletContext中。
因此即使context.getRealPath("/WEB-INF/dir/dataFile.txt");
返回路径值,也不一定意味着文件位于该实际路径上。