如何在Java Servlet中获取文件路径

4

我正在使用XAMPP在本地创建一个简单的Web应用程序。基本上,我想检查文件是否存在,但我不知道如何获取文件的路径。

如果我执行以下操作,它将会说该文件存在,这是正确的。

String path = "C:\\Users\\user\\Desktop\\ProjectName\\web\\files\\filename.txt";

但是,如果我将项目从一台计算机移动到另一台计算机,这条路径就不起作用了,因为路径不同。我的问题是,有什么快捷方式可以获取文件位置?我知道在PHP中,它会像这样:

path = base_url()."files\filename.txt";

我无法用言语表达我想问的问题,但我认为人们会理解。

编辑:

如果有影响的话,我也在使用Netbeans。


web是Web应用程序的文档根目录吗?例如,WEB-INFweb的子目录,而files.war文件内部的顶级目录吗?如果是这样,请使用Servlet.getResourceAsStream("/files/filename.txt") - Andreas
1个回答

2

要找到您的路径真正所在的位置,最简单的方法是按照以下步骤操作,因为每个应用服务器处理文件句柄的方式都有所不同:

System.out.println(new File(".").getAbsolutePath());

这样,您可以在当前目录上打开文件句柄,并知道您所在的位置。从那里开始,您就知道如何导航。

请注意,这只是一种找到起始点的诡计。根据您想要实现的目标,最好使用应用程序服务器基础结构来处理文件。

如果您想知道如何获取您引用的基本URL,则该URL存储在servlet请求的请求上下文中:

public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
            throws ServletException, IOException
  {
String url = request.getRequestURL().toString();

当前目录可以是任何东西,并且可以在服务器之间更改,因此这不是正确的方法。getRequestURL()返回用于访问Web服务器的URL,与Web服务器上的文件结构无关。因此,答案的两个部分都没有用处 - Andreas
同意,然而问题比较广泛,如果我们能够了解应用服务器和使用案例的更多细节,那么就可以给出更有用的答案。通常可以通过参数在应用服务器启动时设置当前目录,因此您可以确定性地访问文件。 - Remo Liechti
请在评论中询问澄清而不是给出无用的答案,多线程多Web应用程序Web服务器中永远不应该使用当前目录进行任何操作。为了使多个Web应用程序共享单个Web服务器(servlet容器),Web应用程序代码应尽可能少地依赖JVM的状态。 - Andreas
你是对的。 在Web应用程序中访问文件时,请使用:getServletContext().getResourceAsStream("/myfile.txt)。当使用Tomcat作为应用服务器时,您可以使用System.getProperty("catalina.base")来查找其使用的基础。您还可以创建自己的环境变量,在其中放置文档存储的文件夹位置。 - Remo Liechti
不要跟 说。我已经在15分钟前的评论中说过了! - Andreas
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接