首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

java相关的File有关问题

2012-05-22 
java相关的File问题我需要建立一些文件夹,首先在根目录下建立一个number文件夹,然后在number中建立以1-9数

java相关的File问题
我需要建立一些文件夹,首先在根目录下建立一个number文件夹,然后在number中建立以1-9数字命名的文件夹,然后又要在1-9每一个文件夹中再次建立以1-9命名的文件夹,一共要创建9层,我该如何写才能保证代码量较少,而且执行速度快,上次我写了一个,结果执行了大半天都没完成,而且代码貌似还有点多了。初学者,求大家指教.

[解决办法]
以前学过树的遍历吧?把你的需求当作是树就行了。

用递归实现遍历就行了,深度优先或广度优先都行,关键是构造递归函数,伪代码如下:

@param rootDir 根目录
@param range 单层目录的数量,你的要求就是9了
@param deep 目录深度,你的要求还是9了
public void treeDirCreate(File rootDir, int range, int deep) {
for (int i = 1 ~ range) {
File newRoot = xxooxxoo; // 以i为名称创建好目录
if (deep > 1) treeDirCreate(newRoot, range, deep-1); // 递归调用
}
}
[解决办法]
是用FTP上传就简单多了。

Java code
    public int upload(InputStream in, String newname) throws IOException {        TelnetOutputStream os = null;        byte[] bytes = new byte[1024];        try {            newname = newname.substring(newname.lastIndexOf("/")+1);//获取文件名称            os = ftpClient.put(newname);            int c;            while ((c = in.read(bytes)) != -1) {                os.write(bytes, 0, c);            }        } catch (IOException e) {            e.printStackTrace();            return 0;        }        os.flush();        in.close();        os.close();        //ftpClient.closeServer();        bytes = null;        return 1;    }        /**     * 创建及寻找需要上传文件的目录     * @param path     * @return boolean     * 如果有违例,请使用@exception/throws [违例类型]   [违例说明:异常的注释必须说明该异常的含义及什么条件下抛出该      * @see          [类、类#方法、类#成员]     */    public boolean isDirExist(String path) {        try {            ftpClient.cd(path);//进入需要上传文件的目录        } catch (IOException e) {            ftpClient.sendServer("MKD " + path + "\r\n");//如果该目录不存在,则创建            try {                ftpClient.cd(path); //进入需要上传文件的目录                ftpClient.readServerResponse();            } catch (IOException e1) {                e1.printStackTrace();            }        }        return true;    }
[解决办法]
其实就是获得
number/1/1/1/1/1/1/1/1/1
number/1/1/1/1/1/1/1/1/2
number/1/1/1/1/1/1/1/1/3
...
number/9/9/9/9/9/9/9/9/9
这样的路径组合,所以循环处理一下就可以了,获得这样的字符串,直接调用File的mkdirs就可以了,不用每一层都去自己mkdir

for example

Java code
File root = new File("/number"); //number目录if (root.exists() && root.isFile()) { //如果该文件存在并且是个文件,则删除,否则没法建目录    root.delete();}if (! root.exists()) { //如果该文件不存在,则创建number目录    root.mkdir();}//一下是循环,创建子目录,就是获取子目录组合的字符串,调用File的mkdirs方法int deep = 9;int[] range = {1,2,3,4,5,6,7,8,9};int[] idx = new int[deep];StringBuilder buf = new StringBuilder();while (idx[0] < range.length) {    buf.delete(0, buf.length());    buf.append(root.getPath());    for (int i=0; i<idx.length; i++) {        buf.append("/").append(range[idx[i]]);    }    File dir = new File(buf.toString());    dir.mkdirs();    idx[idx.length-1]++;    for (int i=idx.length-1; i>0; i--) {        if (idx[i] == range.length) {            idx[i] = 0;            idx[i]++;        } else {            break;        }    }}
[解决办法]
不是代码问题,是文件太多了。
一棵满九叉树,九的九次方个。我只做了三叉:
Java code
import java.io.*;public class Test {    static final int N = 3;    public static void main(String[] args) {        String s0 = "d:/number";        File f = new File(s0);        if (!f.exists()) {            f.mkdir();        }        for (int i = 1; i <= N; i++) {            String s1 = new String(s0 + "/" + i);            // mkd(s1);            for (int j = 1; j <= N; j++) {                String s2 = new String(s1 + "/" + j);                // mkd(s2);                for (int k = 1; k <= N; k++) {                    String s3 = new String(s2 + "/" + k);                    mkd(s3);                }            }        }    }    static void mkd(String s) {        File f = new File(s);        f.mkdirs();        //System.out.println(s);    }} 


[解决办法]
9*9*9*9*9*9*9*9*9 == 387420489

如果1秒建一个:
387420489/86400(一天的秒数)约等于 4484天

如果1秒建4484个文件,则需一天时间。

请问现在什么电脑能这么快的创建文件?

热点排行