Java 遍历指定路径下的所有文件和子文件夹

package fileinfo;

import java.io.File;

public class FileInfo {
    private File fp;
    private int index;
    private int level;

    public FileInfo(File fp,int index,int level){
        this.fp=fp;
        this.index=index;
        this.level=level;
    }

    public File getFp() {
        return fp;
    }

    public int getIndex() {
        return index;
    }

    public int getLevel() {
        return level;
    }

    public void setIndex(int index) {
        this.index = index;
    }
}

package fileinfo;

import java.io.File;
import java.util.Stack;

public class Test {
    private static void treeView(String path) {
        int cnt;
        File f = new File(path);
        if (f.isFile()) {
            System.out.println(f.getName());
            return;
        }

        Stack<FileInfo> stk = new Stack<FileInfo>();

        boolean foundDir;
        FileInfo finfo = new FileInfo(f, 0, 0);

        stk.push(finfo);
        while (!stk.empty()) {//如果不空
            finfo = stk.peek();
            f = finfo.getFp();
            cnt=f.getName().length();
            foundDir = false;

            for (int i = finfo.getIndex(); !foundDir && i < f.listFiles().length; i++) {
                for (int j = 0; j < finfo.getLevel()*10; j++) {
                    System.out.print(" ");
                }

                System.out.print(f.listFiles()[i].getName());
                if (f.listFiles()[i].isDirectory()) {
                    System.out.print(" *");
                    finfo.setIndex(i + 1);
                    stk.push(new FileInfo(f.listFiles()[i], 0, finfo.getLevel() + 1));
                    foundDir = true;
                }
                System.out.println();
            }
            if (!foundDir)
                stk.pop();
        }
    }

    public static void main(String[] args) {
        treeView("d:\\Program");
    }
}

.gitignore
.idea *
          .gitignore
          libraries *
                    lib.xml
                    MigLayout.xml
          misc.xml
          modules.xml
          workspace.xml
data.txt
hero.lrc
lib *
          miglayout-core-javadoc.jar
          miglayout-core-sources.jar
          miglayout-core.jar
          miglayout-swing-javadoc.jar
          miglayout-swing-sources.jar
          miglayout-swing.jar
          mysql-connector-j-8.0.33.jar
out *
          production *
                    project001 *
                              cn *
                                        com *
                                                  C1.class
                                                  C2.class
                                                  C3.class
                                                  C4.class
                                                  C5.class
                                                  C6.class
                                                  C7.class
                                                  C8.class
                                                  C9.class
                                                  jform *
                                                            myJForm.class
                                                            myJForm.jfd
                                                  MyClass.class
                                                  p71 *
                                                            Circle.class
                                                            Cylinder.class
                                                            Test.class
                                                  Yun2_4_shixun2.class
                              com *
                                        abc *
                                                  project1 *
                                                            A.class
                                                  project2 *
                                                            B.class
                              course *
                                        service *
                                                  FactorialSum.class
                              eexam6 *
                                        Book.class
                                        Test_Book.class
                              fileinfo *
                                        FileInfo.class
                                        Test.class
                              Main.class
                              test *
                                        JDBC.class
                              week3 *
                                        day3 *
                                                  Employee.class
                                                  Manager.class
                                                  Test_Employee.class
                                        day4 *
                                                  A.class
                                                  B.class
                                                  Test.class
                                        exam1 *
                                                  Employee.class
                                                  Test.class
                                        exam2 *
                                                  Employee.class
                                                  Test.class
                                        exam3 *
                                                  Employee.class
                                                  Test.class
                                        exam4 *
                                                  Employee.class
                                                  Singleton.class
                                                  Test.class
                                        exam5 *
                                                  Book.class
                                                  Employee.class
                                                  Singleton.class
                                                  Test.class
                                                  TestSingleton.class
                                                  Test_Book.class
                                        exam6 *
                                                  Info.class
                                                  Lyric.class
                                                  Yun2_4.class
                              xxx *
                                        project1 *
                                                  A.class
                                        project2 *
                                                  B.class
project001.iml
src *
          cn *
                    com *
                              C1.java
                              C2.java
                              C3.java
                              C4.java
                              C5.java
                              C6.java
                              C7.java
                              C8.java
                              C9.java
                              jform *
                                        myJForm.java
                                        myJForm.jfd
                              MyClass.java
                              p71 *
                                        Circle.java
                                        Cylinder.java
                                        Test.java
                              Yun2_4_shixun2.java
          com *
                    abc *
                              project1 *
                                        A.java
                              project2 *
                                        B.java
          course *
                    entity *
                    service *
                              FactorialSum.java
                    util *
          eexam6 *
                    Test_Book.java
          fileinfo *
                    FileInfo.java
                    Test.java
          Main.java
          test *
                    JDBC.java
          week3 *
                    day3 *
                              Employee.java
                              Manager.java
                              Test_Employee.java
                    day4 *
                              Test.java
                    exam1 *
                              Employee.java
                              Test.java
                    exam2 *
                              Employee.java
                              Test.java
                    exam3 *
                              Employee.java
                              Test.java
                    exam4 *
                              Employee.java
                              Singleton.java
                              Test.java
                    exam5 *
                              Book.java
                              Employee.java
                              Singleton.java
                              Test.java
                              TestSingleton.java
                              Test_Book.java
                    exam6 *
                              Info.java
                              Lyric.java
                              Yun2_4.java
          xxx *
                    project1 *
                              A.java
                    project2 *
                              B.java
三个源码 及  真心英雄 歌词与音频 *
          hero.lrc
          Info.java
          Lyric.java
          Yun2_4.java
          真心英雄.wav
三个源码 及  真心英雄 歌词与音频.zip
真心英雄.wav

小改动的代码:

package fileinfo;

import java.io.File;
import java.util.Stack;

public class Test {
    private static void treeView(String path) {
        int cnt;
        File f = new File(path);
        if (f.isFile()) {
            System.out.println(f.getName());
            return;
        }

        Stack<FileInfo> stk = new Stack<FileInfo>();

        boolean foundDir;
        FileInfo finfo = new FileInfo(f, 0, 0);
        int level;
        int index;

        stk.push(finfo);
        while (!stk.empty()) {//如果不空
            finfo = stk.peek();
            f = finfo.getFp();
            level=finfo.getLevel();//第几层
            index=finfo.getIndex();//某层第index个文件
            foundDir = false;

            for (int i = index; i < f.listFiles().length; i++) {
                for (int j = 0; j < level*10; j++) {
                    System.out.print(" ");
                }

                System.out.print(i+ " " +f.listFiles()[i].getName());
                if (f.listFiles()[i].isDirectory()) {
                    System.out.println(" **DIR**");
                    finfo.setIndex(i + 1);// 标记下一个没有处理的文件
                    FileInfo sub = new FileInfo(f.listFiles()[i], 0, level + 1);
                    stk.push(sub);
                    foundDir = true;
                    break;
                }
                System.out.println();
            }
            if (!foundDir)
                stk.pop();
        }
    }

    public static void main(String[] args) {
        treeView("d:\\Program\\teach\\project001\\");
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值