【问题标题】:How to open file in META-INF independent of environment如何在 META-INF 中独立于环境打开文件
【发布时间】:2023-03-21 22:55:01
【问题描述】:

我学习java中的servlet编程,使用tomcat 7作为服务器,eclipse作为IDE,ubuntu作为操作系统。 我需要在 META-INF 文件夹中打开文件“xyz.txt”,但我想独立于工作环境(文件系统、操作系统、IDE、服务器、生产开发环境......)。 我一直在寻找几个小时来回答这个问题,但没有成功。我读到我应该使用类似于下面的代码,但是所有这些代码行都给我 null (它在 Servlets doGet 方法中,也许它不是此类代码的正确位置,但它只是用于学习目的):

this.getClass().getResource("META-INF/xyz.txt"),
this.getClass().getResource("/META-INF/xyz.txt"),
this.getClass().getResourceAsStream("META-INF/xyz.txt"),
this.getClass().getResourceAsStream("/META-INF/xyz.txt"),
this.getClass().getClassLoader().getResource("META-INF/xyz.txt"),
this.getClass().getClassLoader().getResource("/META-INF/xyz.txt"),
this.getClass().getClassLoader().getResourceAsStream("META-INF/xyz.txt"),
this.getClass().getClassLoader().getResourceAsStream("/META-INF/xyz.txt"),

编辑:有没有办法让 java.io.File 对象指向 xyz.txt 文件?

【问题讨论】:

    标签: java eclipse tomcat servlets meta-inf


    【解决方案1】:

    使用ServletContext 方法。例如。 getResourceAsStream()。在doGet() 中尝试以下代码:

    ServletContext context = getServletContext();
    InputStream inStream = context.getResourceAsStream("/META-INF/xyz.txt");
    

    【讨论】:

    • getResourceAsStream 有效,但 getResource 以 jndi:/localhost/projectname/META-INF/xyz.txt 的形式为我提供 URL,我不知道如何真正使用。我只是好奇,有没有办法让 java.io.File 对象指向 xyz.txt?
    • 你的意思是:File f = new File(context.getResource(path).toURI()); ?
    • 如果你输入了正确的路径并且它没有真正工作(我现在无法测试它)你应该使用@Sas解决方案。
    • 不,它不起作用。但是谢谢你的第一个回答。是的,Sas 的回答是我真正想要的。谢谢你们。
    【解决方案2】:

    使用context.getRealPath获取绝对路径并创建文件对象来访问文件:

    File file = new File(getServletContext().getRealPath("META-INF/xyz.txt"));
    

    【讨论】:

    • 是的,就是这样!谢谢。
    猜你喜欢
    • 2010-10-16
    • 2016-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多