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

时间:2013-01-16 19:03:51

标签: java gwt tomcat servlets file-io

概要

给出以下(删节)代码,它位于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对象,因为我正在传递文件的真实文件路径。我可以提出一些替代解决方案来解决这个问题,但现在我真的很好奇为什么它无法找到该文件。

提前感谢任何见解。

1 个答案:

答案 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");返回路径值,也不一定意味着文件位于该实际路径上。