Java 如何在servlet中打开文件?

Java 如何在servlet中打开文件?,java,servlets,path,Java,Servlets,Path,我试图打开一个文件,但当前CWD错误。我试图从/ROOT/app/WEB-INF/classes/pl/jcubic/Service.class打开类文件 但当前工作目录使用: File root = new File("."); root.getAbsolutePath(); 返回/var/lib/tomcat7/路径,如何从servlet获取应用程序目录(即使我更改了名称或在Windows机器上运行,我也希望我的代码正常工作)。除非您的ear被分解,否则您无法通过文件API

我试图打开一个文件,但当前CWD错误。我试图从
/ROOT/app/WEB-INF/classes/pl/jcubic/Service.class打开类文件

但当前工作目录使用:

    File root = new File(".");
    root.getAbsolutePath();

返回
/var/lib/tomcat7/
路径,如何从servlet获取
应用程序
目录(即使我更改了名称或在Windows机器上运行,我也希望我的代码正常工作)。

除非您的ear被分解,否则您无法通过文件API获取其内容。如上所述,您应该使用getResource。如果您希望处理分解的web存档中的文件,则需要获取当前目录。使用ServletContext.getRealPath(),例如:

String path = getServletContext().getRealPath("/")+"/";
File config = new File(path + "WEB-INF/conf/tag_checker.xml");
File lists = new File(path + "WEB-INF/conf/lists.xml");

除非您的ear被分解,否则您无法通过文件API获取其内容。如上所述,您应该使用getResource。如果您希望处理分解的web存档中的文件,则需要获取当前目录。使用ServletContext.getRealPath(),例如:

String path = getServletContext().getRealPath("/")+"/";
File config = new File(path + "WEB-INF/conf/tag_checker.xml");
File lists = new File(path + "WEB-INF/conf/lists.xml");
你可以看

InputStream input = getServletContext().getResourceAsStream("/abc.txt");

你可以看

InputStream input = getServletContext().getResourceAsStream("/abc.txt");

文件=新文件(“文件路径”)

processexec=Runtime.getRuntime().exec(“rundll32”+“”+”url.dll,FileProtocolHandler”+“”+file.getAbsolutePath())

File File=新文件(“文件路径”)


processexec=Runtime.getRuntime().exec(“rundll32”+“”+”url.dll,FileProtocolHandler”+“”+file.getAbsolutePath())

是否要从web应用程序中读取web应用程序中存在的文件?是否尝试打开servlet中包含的文件?如果是,不要使用
文件
API;根本不需要容器解压缩servlet。改为使用
getResource
方法。@Makky是的,但我没有在
webapps
目录中使用WAR file only符号链接到我的应用程序。我重新编译一个文件(使用我自己的类加载器加载),而不需要进行部署。当我使用绝对路径时,它可以工作。@chrylis如何使用getResource打开一个文件(我需要将其读取为二进制文件)?此外,我可能想打开一个在运行应用程序时不存在的文件。一旦部署了该文件,您就无法在web应用程序内创建该文件。您可以读取war中的文件您想从web应用程序中读取web应用程序中存在的文件吗?是否尝试打开servlet中包含的文件?如果是,不要使用
文件
API;根本不需要容器解压缩servlet。改为使用
getResource
方法。@Makky是的,但我没有在
webapps
目录中使用WAR file only符号链接到我的应用程序。我重新编译一个文件(使用我自己的类加载器加载),而不需要进行部署。当我使用绝对路径时,它可以工作。@chrylis如何使用getResource打开一个文件(我需要将其读取为二进制文件)?此外,我可能想打开一个在运行应用程序时不存在的文件。一旦部署了该文件,您就无法在web应用程序内创建该文件。你可以阅读战争中的文件这是一个评论而不是答案。如果您将此作为答案发布,请提供一些示例。好的,这项工作
this.getServletConfig().getServletContext().getRealPath(“.”)在查看javadoc时发现了此内容。这是一条注释而不是答案。如果您将此作为答案发布,请提供一些示例。好的,这项工作
this.getServletConfig().getServletContext().getRealPath(“.”)在查看javadoc时发现了此问题。将您的问题标记为解决方案,因为您提供了代码。似乎我不需要调用
getServletConfig
方法。将您的方法标记为解决方案,因为您提供了代码。似乎我不需要调用
getServletConfig
方法。