简体   繁体   中英

Get real path of a file in a Java class

I get a file like that :

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

But I want to only have the relative path as stats/stats.csv . I don't want to have to write the complete path in my code.

In a servlet, I do it this way :

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

But here it is not in a servlet. So what is the equivalent way in a java class ?

You should put it in the CLASSPATH and read it from an InputStream acquired using getResourceAsStream() . It's the path-independent way to access a file.

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 is the path, relative to which you want to get Relative Path .

I found a solution. I can use my JSP to use File statsFile = new File(this.getServletContext().getRealPath("/") + "stats/stats.csv") and then pass statsFile to my class.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM