上周在ETI的任务是对一个基于afresco的在线文件管理系统,准备一些测试的文件。
文件要求:folders树,每层folder树包含8个folder(f1,f2,```,f8)和4个files,次层的folder(f1,f2,```,f8)也包含8个folder( {f11,f12,```,f18}, {f21,f22,```,f28} , ``` {f81,f82,```,f88} )和4个files,如此递推······,到第七层 ( {f111111,f111112,```,f111118}, {f111121,f111122,```,f111128} , ``` {f888881,f888882,```,f888888} ) .
编程逻辑:
1 生成7层的folder树;
2 在每个folder下copy4个相同的file。
具体过程:
稍作思考,因为每层文件夹内的folders和files数目是一样的,选用了java的6重for循环,每层循环生成路径,便于第6层循环的 f.mkdir() 生成文件树。待文件树生成后(用时约几分钟),在源代码的上面每层循环末尾加上copy(f1,f2,f3,f4,filepath),实现copy文件到指定的每层目录文件下。
问题出现:
1 第一次跑程序,在 接近30万的folder中,每个folder放4个file,总共120万个,考虑不周,在程序跑了接近6个小时后,出错。仔细检查发现,是计算机的物理内存不足。因为4个文件约为300Kb,则需要90G的磁盘存储,而当时的计算机剩余存储为56G。只能,删除已生成的文件树,重新生成。
2 第二个问题是,接近60G的文件不是你想删就能删的。直接拖垃圾桶,垃圾桶吃不下啊,直接Shift+Delete强制从磁盘删除,那绵长的准备时间可以让我去shi了。只能写代码,让计算机去干了,于是又写了一个删除指定目录下文件盒文件内容的类,代码见我的代码。又是漫长的文件删除工作时间等待······(真是希望Eclipse可以多线程的啊)
3 有了前面的失误,准备的很小心,4个files总共大小为30KB,120万就是9G,Ok。先将每层文件个数缩减为3个测试一下。
4 问题又出现了,因为代码里面是copy文件和生成文件夹同步的,所以在copy的时候会报错,解决方法很简单,运行程序2次。
5 将level改为8,可以圆满生成。
OK,完成任务!