首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取特定目录中的所有文件,在java中的html列表中显示文件名。

读取特定目录中的所有文件,在java中的html列表中显示文件名。
EN

Stack Overflow用户
提问于 2014-03-13 06:21:26
回答 3查看 82关注 0票数 0
代码语言:javascript
复制
package fileBrowser;

import java.io.File;

public class Filewalker {
String str="";
public void walk( String path) {
File root = new File( path );
    File[] list = root.listFiles();
    int numfiles=list.length;
    for (int i=0;i<list.length; i++ ) {

        if ( list[i].isDirectory() ) {
            System.out.print("<li><span>"+list[i].getName()+"</span>\n<ul>");
                if(list[i].listFiles().length==0){
                System.out.println("</ul>\n</li>");
                continue;
            }
            walk( list[i].getAbsolutePath());
        }
        else {
            System.out.println( "<li>"+list[i].getName()+"</li>" );
                    if(i==numfiles-1){
                    System.out.println("</ul>");

                }

        }
    }
}


public static void main(String[] args) {
    Filewalker fw=new Filewalker();
    System.out.println("<ul>");
    fw.walk("C:/test");
    System.out.println("</ul>");

}

}

ul列表中文件夹的嵌套是不合适的,如果文件夹中有许多嵌套文件夹,则当方法从最内部的文件夹返回时,li标记的关闭不会发生,我得到的输出是:

代码语言:javascript
复制
<ul>
<li><span>abc</span>
<ul><li><span>ced</span>
<ul><li>New Microsoft Publisher Document - Copy (2).pub</li>
<li>New Microsoft Word Document - Copy (2).docx</li>
<li><span>test</span>
<ul><li><span>inner</span>
<ul><li><span>inner2</span>
<ul><li>New Text Document.txt</li>
</ul>
<li>New Bitmap Image.bmp</li>
</ul>
<li>New Microsoft Publisher Document.pub</li>
<li>New WinRAR ZIP archive.zip</li>
</ul>
<li>New Microsoft Publisher Document - Copy.pub</li>
<li>New Microsoft Publisher Document.pub</li>
<li>New Microsoft Word Document - Copy.docx</li>
<li>New Microsoft Word Document.docx</li>
</ul>
<li>temp1.txt</li>
<li><span>xyz</span>
<ul><li>stud11.txt</li>
<li>temp.txt</li>
</ul>
</ul>
EN

回答 3

Stack Overflow用户

发布于 2014-03-13 06:26:24

代码语言:javascript
复制
System.out.print("<li><span>"+list[i].getName()+"</span>\n<ul>");
            if(list[i].listFiles().length==0){
            System.out.println("</ul>\n</li>");
            continue;
        }

这段代码看起来像问题所在。

打开<li><ul>,但只有当目录为空时才关闭。

票数 1
EN

Stack Overflow用户

发布于 2014-03-13 07:23:35

正如StanislavL之前在一个答复中所写的,您打开标记,但不要关闭它们。

除了您的代码之外,我不能给您更多的提示,但是会将您的清单分成两个函数。这是我的尝试(测试!)

代码语言:javascript
复制
public class ListFiles {

    public static void main(String[] args) {
        File root=new File("./../");
        System.out.println("<ul>");
        printDir(root);
        System.out.println("</ul>");
    }

    static void printDir(File dir)
    {
        if(!dir.isDirectory())
            return;

        System.out.println("<li>" + dir.getName() + "</li>");
        System.out.println("<ul>");
        for(File file : dir.listFiles())
        {
            if(file.isFile())
                printFile(file);
            else
                printDir(file);
        }
        System.out.println("</ul>");
    }

    static void printFile(File file)
    {
        if(!file.isFile())
            return;

        System.out.println("<li>" + file.getName() + "</li>");
    }

}

printDir()打印并列出任何目录。如果在实际目录中找到一个文件,则调用printFile()只打印带有文件名的一行。通常,可以将printFile()中的单个printFile()移到printDir()中,因此不需要额外的函数,但是如果要将更多的信息打印到文件中,则有更好的概述。

执行此操作将导致:

  • ..
    • ListFiles
      • .classpath
      • .project
      • .settings
        • org.eclipse.jdt.core.prefs

      • bin
        • ListFiles.class

      • 钢筋混凝土
        • ListFiles.java

也许它能帮到你:-)

票数 0
EN

Stack Overflow用户

发布于 2014-03-13 07:37:04

您应该考虑使用Java 7中提供的新Files,这样可以使您的工作更加轻松。示例代码(未经测试,但应该完成此工作):

代码语言:javascript
复制
public void printDirectoryToStdout(final Path dirBase)
    throws IOException
{

    System.out.println("<ul>");

    Files.walkFileTree(dirBase, new FileVisitor<Path>()
    {
        @Override
        public FileVisitResult preVisitDirectory(final Path dir,
            final BasicFileAttributes attrs)
            throws IOException
        {
            System.out.printf("<li><span>%s</span>\n<ul>\n", dir.getFileName());
            return FileVisitResult.CONTINUE;
        }

        @Override
        public FileVisitResult visitFile(final Path file,
            final BasicFileAttributes attrs)
            throws IOException
        {
            System.out.printf("<li>%s</li>\n", file.getFileName());
            return FileVisitResult.CONTINUE;
        }

        @Override
        public FileVisitResult visitFileFailed(final Path file,
            final IOException exc)
            throws IOException
        {
            throw exc;
        }

        @Override
        public FileVisitResult postVisitDirectory(final Path dir,
            final IOException exc)
            throws IOException
        {
            if (exc != null)
                throw exc;
            System.out.print("\n</ul>\n</li>\n");
            return FileVisitResult.CONTINUE;
        }
    });

    System.out.println("</ul>");
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22370620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档