获取文件列表

    获取指定文件夹下的文件列表,并以缩进形式列出子文件夹中的文件和文件夹

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * @create 2017-09-23 20:06
 */
public class Main {
    public static List<String> getListFiles(String path) {
        List<String> result = new ArrayList<String>();
        File f = new File(path);
        File[] files = f.listFiles();

        // 方法一:文件夹和文件名混合排序
//        for (int i = 0; i < files.length; i++) {
//            if (files[i].isDirectory()) { //为目录
//                result.add(files[i].getPath().substring(files[i].getPath().lastIndexOf("\\") + 1));
//                List<String> list = getListFiles(files[i].getAbsolutePath());
//                for (String s : list) {
//                    result.add("\t" + s);
//                }
//            } else { //为文件
//                result.add(files[i].getName());
//            }
//        }

        // 方法二:文件夹在前,文件在后
        ArrayList<File> file = new ArrayList<File>();
        ArrayList<File> directory = new ArrayList<File>();
        for (int i = 0; i < files.length; i++) {
            if (files[i].isDirectory()) {
                directory.add(files[i]);
            } else {
                file.add(files[i]);
            }
        }
        Collections.sort(file);
        Collections.sort(directory);

        for (int i = 0; i < directory.size(); i++) {
            result.add(directory.get(i).getPath().substring(directory.get(i).getPath().lastIndexOf("\\") + 1));
            List<String> list = getListFiles(directory.get(i).getAbsolutePath());
            for (String s : list) {
                result.add("\t" + s);
            }
        }
        for (int i = 0; i < file.size(); i++) {
            result.add(file.get(i).getName());
        }

        return result;
    }

    public static void main(String[] args) throws IOException {
        List<String> result = getListFiles("C:\\Windows");
        File f = new File("tmp.txt");
        f.delete();  //删除上一次运行后的tmp.txt文件
        FileWriter fw = new FileWriter("tmp.txt", true);
        for (String s : result) {
            fw.write(s + "\n");
        }
        fw.close();
    }
}

    程序中将得到的结果写入了tmp.txt文件中,得到的结果如下

算法第四版
	ch1
		1.1
			Main27.java
			Main29.java
			Main30.java
			Main31.java
			Main32.java
			Main33.java
		1.2
			Main1.java
		1.3
			Main37.java
	algs4.jar
	stdlib.jar
背包九讲.chm
练习.doc

    程序还存在一些问题,暂时还没想出来,比如当地址为D盘的根地址,即"D:\\",或"C:\Windows"时会出现异常。求指教

Exception in thread "main" java.lang.NullPointerException
	at Main.getListFiles(Main.java:33)
	at Main.getListFiles(Main.java:45)
	at Main.getListFiles(Main.java:45)
	at Main.main(Main.java:58)

 

转载于:https://my.oschina.net/yitiaoxianyu/blog/1542345

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值