java获取文件路径

时间:2010-04-23 22:10:01

标签: java file jsp path

我有一个jsp页面,其中包含打印给定目录中所有文件及其文件路径的代码。代码是

if (dir.isDirectory())
        {
            File[] dirs = dir.listFiles();
            for (File f : dirs)
            {
                if (f.isDirectory() && !f.isHidden())
                {
                    File files[] = f.listFiles();
                    for (File d : files)
                    {
                        if (d.isFile() && !d.isHidden())
                        {
                            System.out.println(d.getName()+ 
                            d.getParent() + (d.length()/1024));
                        }
                    }
                }
                if (f.isFile() && !f.isHidden())
                {
                    System.out.println(f.getName()+ 
                    f.getParent() + (f.length()/1024));
                }
            }
        }

问题是它打印完整的文件路径,从tomcat访问时无效。例如,代码吐出以下路径:

/usr/local/tomcat/sites/web_tech/images/scores/blah.jpg

我希望它只打印路径到/ images ie

/images/scores/blah.jpg

我知道我可以乱用一个实际的字符串,即分割它或字符串匹配,但有更简单的方法吗?

由于

3 个答案:

答案 0 :(得分:3)

依赖像webapp这样的文件系统(即使用绝对路径)不好的做法会使你的代码不那么便携。

您应该将文件保存在resources目录中,并使用ClassLoader加载相对于类路径的文件。请参阅ClassLoader.getResource()ClassLoader.getResourceAsStream()。另一种选择是使用ServletContext.getResource()ServletContext.getResourceAsStream()。您可以使用继承的getServletContext()方法获取servlet中的ServletContext

答案 1 :(得分:2)

你需要将根路径子串起来。

File root = new File(getServletContext().getRealPath("/"));
for (File file : root.listFiles()) {
    // ...
    String path = file.getAbsolutePath().substring(root.getAbsolutePath().length());

顺便说一句,那些System.out.println()行实际上不会打印到响应中。它们打印到stdout,可能是IDE控制台或服务器的日志文件。此外,这种逻辑不属于JSP文件。在真正的Java类中进行,然后转发到JSP进行显示。

答案 2 :(得分:0)

由于/usr/local/tomcat/sites/web_tech/images/scores是列出的目录,因此以输出为根的/usr/local/tomcat/sites/web_tech似乎有点......任意。

我能想到的最好的事情是拥有一个File root = <your intended root>;,然后做类似于

的事情
String path = f.getName();
while (!f.equals(root)) {
    f = f.getParent();
    path = f + "/" + path;
}