【问题标题】:Get real path of a file in a Java class获取Java类中文件的真实路径
【发布时间】:2012-09-27 11:38:34
【问题描述】:

我得到一个这样的文件:

String myFile = "D:/dev/workspace/MyProject/WebContent/stats/stats.csv";
File statsFile = new File(myFile);

但我只想将相对路径设为stats/stats.csv。我不想在我的代码中写完整的路径。

在 servlet 中,我是这样做的:

File statsFile = new File(this.getServletContext().getRealPath("/") + "stats/stats.csv");

但这里它不在 servlet 中。那么java类中的等价方式是什么?

【问题讨论】:

    标签: java path filepath


    【解决方案1】:

    您应该将它放在 CLASSPATH 中并从使用 getResourceAsStream() 获取的 InputStream 中读取它。这是访问文件的独立于路径的方式。

    【讨论】:

    • 他说他不想在 Servlet 中使用它
    • 可以通过SomeApplicationClass.class.getResourceAsStream()得到它
    • 我不确定它是如何工作的。我这样做:this.class.getResourceAsStream("stats/stats.csv") 但我猜这是错的。
    • 这意味着“stats”文件夹的父级必须在您的 CLASSPATH 中。如果它返回一个 null InputStream,那说明你做错了。
    【解决方案2】:
    String basePath = "D:/dev/workspace/MyProject/WebContent";
    String absolutePath = "D:/dev/workspace/MyProject/WebContent/stats/stats.csv";
    
    String relativePath = new File(basePath).toURI().
                            relativize(new File(absolutePath).toURI()).getPath();
    
    System.out.println(relativePath);   // stats/stats.csv
    

    basePath 是路径,相对于您要获取Relative Path

    【讨论】:

    • 其实我自己找了个方法找到basePath不用写。
    • @Jim.. 那么你的工作量仍然减少.. 我在处理我的一个项目时也遇到了同样的问题.. 然后我才发现我可以做到这一点..
    【解决方案3】:

    我找到了解决方案。 我可以使用我的 JSP 来使用File statsFile = new File(this.getServletContext().getRealPath("/") + "stats/stats.csv"),然后将statsFile 传递给我的班级。

    【讨论】:

      猜你喜欢
      • 2021-04-03
      • 1970-01-01
      • 2020-01-29
      • 1970-01-01
      • 1970-01-01
      • 2016-02-19
      • 2015-05-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多