2009-07-16 118 views
1

我写了一些代码来读取我的Java Servlet类中的文件。 (我在Tom上使用Windows上的Netbeans服务器)。但是,我的servlet找不到该文件!从Java Servlet读取文件

经过多次挖掘,我发现我必须将我想要读取的文件放在Tomcat/bin文件夹中。这非常令人惊讶。我怎样才能获得我的Webapps /文件夹的路径?假设我的网站项目名为“Web1”。

基本上,我正在做的是我试图读取我的.xsl文件,将我的DOM文档转换为HTML。起初,我尝试将这个.xsl文件放在任何地方(与我的index.jsp处于同一级别,与我的servlet类文件位于同一目录中,但根本没有任何作用)

此外,当我完成transform(),我的HTML文件也会进入Tomcat/bin文件夹〜!

回答

5

你可以使用javax.servlet.ServletContext.getRealPath(String path)吗?

返回包含给定虚拟路径的真实路径的字符串。例如,路径“/index.html”返回服务器文件系统上的绝对文件路径将由“http://host/contextPath/index.html”请求提供服务,其中contextPath是此ServletContext的上下文路径。 返回的真实路径将位于一种适合运行servlet容器的计算机和操作系统的形式,包括适当的路径分隔符。如果servlet容器由于某种原因无法将虚拟路径转换为真实路径(例如,从.war归档中使内容可用时),则此方法返回null。

+0

你建议的技术工作......虽然我想知道是否有办法获得相对路径。 – sivabudh 2009-07-17 00:45:13

0

您在哪里使用XSL?如果来自Java代码,则将该文件放入src/java/resources中,以便在组装WAR /WEB-INF/classes/foo.xsl时结束于类路径的顶部。然后,您可以使用Class#getResource(“foo.xsl”),如果您使用DOM4J或更高版本,则可以使用类似方法来加载文件。 现在,如果它是你的JavaScript在客户端执行,这是一个不同的故事

0

像这样的事情可能对你更方便的转型:

java.net.URL url = ClassLoader.getSystemResource(file_name); 
    try { 
     InputStream is = url.openStream()); 
     //Read the file and do stuff 
    } catch(IOException e) { 
     System.err.println("Error: could not load the file"); 
    } 

这将让你得到一个InputStream的文件在类路径中(在你的情况下,在webapps文件夹中)。至于写作结果,我不确定。