java获取文件路径

java获取文件路径,java,file,jsp,path,Java,File,Jsp,Path,我有一个jsp页面,其中包含打印给定目录中所有文件及其文件路径的代码。代码是 if (dir.isDirectory()) { File[] dirs = dir.listFiles(); for (File f : dirs) { if (f.isDirectory() && !f.isHidden()) {

我有一个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)); } } } if(dir.isDirectory()) { File[]dirs=dir.listFiles(); 用于(文件f:dirs) { if(f.isDirectory()&&!f.ishiden()) { 文件文件[]=f.listFiles(); 用于(文件d:文件) { 如果(d.isFile()&&!d.ishiden()) { System.out.println(d.getName()+ d、 getParent()+(d.length()/1024)); } } } 如果(f.isFile()&&!f.ishiden()) { System.out.println(f.getName()+ f、 getParent()+(f.length()/1024)); } } } 问题是它打印了完整的文件路径,从tomcat访问时,该路径无效。例如,代码会弹出以下路径:

/usr/local/tomcat/sites/web_tech/images/scores/blah.jpg /usr/local/tomcat/sites/web_tech/images/scores/blah.jpg 我希望它只打印到/ie的路径

/images/scores/blah.jpg /图片/分数/blah.jpg 我知道我可能会搞乱一个实际的字符串(拆分或字符串匹配),但有更简单的方法吗


谢谢

像webapp那样依赖文件系统(即使用绝对路径)不是一种好的做法,这会降低代码的可移植性


您应该将文件保存在
resources
目录中,并使用
ClassLoader
相对于类路径加载文件。见和。另一种选择是使用或。您可以使用继承的方法在servlet中获取
ServletContext

因为
/usr/local/tomcat/sites/web\u tech/images/scores
是列出的目录,将
/usr/local/tomcat/sites/web\u tech
作为输出的根目录似乎有点。。。武断的

我能想到的最好的办法是有一个
文件root=然后执行类似的操作

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

您需要将根路径替换为子字符串

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

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

我认为可移植性本身不是问题,因为所需的文件已经在webcontent中,他只想显示它们。