【问题标题】:How to open a file in a servlet?如何在 servlet 中打开文件?
【发布时间】:2013-12-01 15:40:26
【问题描述】:

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

但当前工作目录使用:

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

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

【问题讨论】:

  • 您想从您的网络应用程序中读取您的网络应用程序中存在的文件吗?
  • 您是否试图打开包含在您的 servlet 中的文件?如果是这样,请不要使用File API;完全不需要容器解压您的 servlet。请改用getResource 方法。
  • @Makky 是的,但我不使用 WAR 文件仅符号链接到 webapps 目录中的我的应用程序。我重新编译了一个文件(使用我自己的类加载器加载它)而不需要部署,它在我使用绝对路径时工作。
  • @chrylis 如何使用 getResource 打开文件(我需要将其读取为二进制文件)?此外,我可能想打开一个在我运行应用程序时不存在的文件。
  • 一旦部署,您将无法在 Web 应用程序中创建该文件。可以阅读战争里面的文件stackoverflow.com/questions/3888226/…

标签: java servlets path


【解决方案1】:

你可以阅读它。

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

File file = new File(getServletContext().getRealPath("/abc.txt"));

【讨论】:

  • 将您的标记为解决方案,因为您提供了代码。而且看来我不需要调用getServletConfig方法。
【解决方案2】:

除非你的耳朵被炸开,否则你无法通过 File 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");

【讨论】:

  • 这是评论而非答案。如果您将此作为答案发布,请提供一些示例。
  • 好的,这项工作this.getServletConfig().getServletContext().getRealPath(".") 在查看 javadoc 时发现了这个。
【解决方案3】:

File file=new File("文件路径");

进程执行 = Runtime.getRuntime().exec("rundll32"+" "+"url.dll,FileProtocolHandler"+" "+file.getAbsolutePath());

【讨论】:

    猜你喜欢
    • 2016-07-31
    • 1970-01-01
    • 2014-05-01
    • 2014-07-04
    • 2022-01-04
    • 2019-06-02
    • 2017-01-11
    • 2018-03-14
    • 1970-01-01
    相关资源
    最近更新 更多