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上传就简单多了。
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
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; } }}
[解决办法]
不是代码问题,是文件太多了。
一棵满九叉树,九的九次方个。我只做了三叉:
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个文件,则需一天时间。
请问现在什么电脑能这么快的创建文件?