dali0125 2010-01-11 19:14
浏览 156
已采纳

JAVA文件存储路径问题

建立一个如下图的文件存储路径。一共7层。每层最多100个文件夹,文件夹里最多100个文件~~依此类推~~~
需要帮助~~~多谢~~~
[b]问题补充:[/b]
不好意思,表达得不太明白,再说一遍,不知道能不能说清,一共7层目录,先从最底层开始,00文件夹里最多100个文件,到100个以后,最底层新建01文件夹,01文件夹也是最多100个文件,然后新建02文件夹,以此类推~~~一直到最底层共有100个文件夹,也就是到99。这时倒数第2层00文件夹就满了,那么再倒数第2层新建01文件夹,里面的内容和上面一样最多可以有100个文件夹,每个文件夹最多100个文件,以此类推,倒数第3层,第4层。。。。。。。。

不知道现在说明白没有~~~
[img]http://dl.iteye.com/upload/attachment/191546/b27e18d0-8578-33ce-a3e1-f6cf3967f79c.jpg[/img]

[b]问题补充:[/b]
从最底层开始建,满了再建上一层,不是一开始就全建好~~~
[img]http://dl.iteye.com/upload/attachment/191643/e5873463-6e8c-3bb5-86ac-5978cb8c2495.jpg[/img]

[b]问题补充:[/b]
00-99意思是一共100个,中间省略,,每一层都是最多100个,然后100个的子目录还是最多100个,以此类推,不是只有第7层最多100个文件~~~

  • 写回答

4条回答 默认 最新

  • iteye_17046 2010-01-12 11:40
    关注

    抛砖引玉吧 应该可以解决你的需求,不过有一个问题是 如果中间某个文件或文件夹被删除 则无法自动补充 求解答
    [code="java"]package cn.istudy.util;

    import java.io.File;
    import java.io.IOException;

    public class FileTest {

    public static final int CHILD_LIMIT = 10;// 最大啊子文件数
    public static final int DEEP_LIMIT = 7;// 文件夹深度
    
    public static void main(String[] args) {
        FileTest ft = new FileTest();
        File root = new File("d:\\testfile\\");
        try {
            for (int i = 0; i < 45; i++) {
                System.out.println(i + "--->" + ft.testFile(root, 0, false));
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        // ft.delFile(root);
    }
    
    public boolean testFile(File root, int k, boolean nextChild)
            throws IOException {
        int i = 0;// 文件名 个位数
        int j = 0;// 文件名 十位数
        System.out.println("i--->" + i + "         j--->" + j
                + "          k--->" + k);
        if (root.exists() && root.isDirectory() && root.canRead()
                && root.canWrite()) {
            File[] children = root.listFiles();
            File child = null;
            if (children.length == 0) {// 如果子目录数为0
                child = new File(root, j + "" + i);// 创建新文件对象
                if (k == DEEP_LIMIT) {// 如果深度已达限制则创建文件
                    child.createNewFile();
                    return true;
                } else {// 否则为目录 并深度递增
                    child.mkdir();
                    k++;
                    nextChild = false;
                    return testFile(child, k, nextChild);// 递归
                }
            } else if (children.length > 0 && children.length < CHILD_LIMIT) {// 如果有子目录且数量未达到子目录限制
                if (k == DEEP_LIMIT) {// 如果深度已达限制 则创建文件
                    i = children.length % 10;
                    j = children.length / 10;
                    child = new File(root, j + "" + i);// 文件名以当前目录子文件数+1
                    child.createNewFile();
                    return true;// 返回
                } else {// 否则 则进入目录
                    if (nextChild) {// 如果标识为下一个子目录 则文件名为当前子目录数+1
                        i = children.length % 10;
                        j = children.length / 10;
                    } else {// 否则 为当前子目录最后一个目录
                        i = (children.length - 1) % 10;
                        j = (children.length - 1) / 10;
                    }
                    child = new File(root, j + "" + i);
                    k++;// 深度递增
                    if (!child.exists()) {// 如果子目录不存在 则创建目录
                        child.mkdir();
                        nextChild = false;// 并标识进入当前目录
                    }
                }
                return testFile(child, k, nextChild);// 递归
            } else if (children.length >= CHILD_LIMIT) {// 如果子目录数已达限制
                nextChild = true;// 标识进入下一个子目录
                return testFile(root.getParentFile(), --k, nextChild);// 递归
            }
        } else {
            throw new IOException();
        }
        return false;
    }
    
    public void delFile(File root) {
        File[] children = root.listFiles();
        if (children.length > 0) {
            for (int i = 0; i < children.length; i++) {
                File child = children[i];
                delFile(child);
            }
        } else {
            System.out.println(root.delete());
            delFile(root.getParentFile());
        }
    }
    

    }
    [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记