在Java类中获取文件的真实路径

6
我收到了这样的文件:

我得到了这样的文件:

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 类中,等效的方式是什么?

3个回答

2

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


他说他不想在Servlet中使用它。 - Razvan
1
可以通过 SomeApplicationClass.class.getResourceAsStream() 获取它。 - Mathias Schwarz
我不确定如何运作。我这样做:this.class.getResourceAsStream("stats/stats.csv"),但我猜想这是错误的。 - Emilie
这意味着“stats”文件夹的父级必须在你的CLASSPATH中。如果它返回一个空的InputStream,那就意味着你做错了。 - duffymo

0
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的方法。 - Emilie
@Jim,那您的工作还能更简化一些。我在处理一个项目时也遇到了同样的问题。后来我才发现我可以这样做。 - Rohit Jain

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

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