黑马程序员技术交流社区
标题:
获取目录下所有的文件问题
[打印本页]
作者:
李阳
时间:
2013-3-12 02:03
标题:
获取目录下所有的文件问题
本帖最后由 李阳 于 2013-3-12 15:02 编辑
import java.io.*;
class FileDemo3
{
public static void main(String[] args) throws IOException
{
File f = new File("d:\\QQ");
BufferedWriter buff = new BufferedWriter(new FileWriter("in.txt"));
getFile(f,buff,0);
}
public static String getLevel(int level)
{
StringBuilder sb = new StringBuilder();
for (int x=0;x<=level;x++ )
{
if (x==level)
{
sb.append("|--");
}
else
sb.append(" ");
}
return sb.toString();
}
public static void getFile(File f,BufferedWriter buff,int level) throws IOException
{
//执行做法1代码,做法2代码注释掉,效果请看效果1
buff.write(getLevel(level)+f.toString());
buff.newLine();
buff.flush();
level++;
//PrintStream pm = System.out;
//BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(pm));
File[] files = f.listFiles();
for (File fs:files )
{
if (fs.isDirectory())
{
/*
//使用做法2,请看效果2.把做法1的代码注释掉,
buff.write(getLevel(level)+f.toString());
buff.newLine();
buff.flush();
*/
getFile(fs,buff,level);
}
else
{
//bufw.write(fs.toString());
buff.write(getLevel(level)+fs.toString());
buff.newLine();
//bufw.newLine();
//bufw.flush();
buff.flush();
}
}
}
}
复制代码
扫描QQ文件夹下的所有文件,并保存在文件中。代码无误。
为神马做法2比做法1少文件呢?
做法1效果图
|--d:\QQ
|--d:\QQ\af.xml.txd
|--d:\QQ\app.xml.txd
|--d:\QQ\AuI18N
|--d:\QQ\AuI18N\2052
|--d:\QQ\AuI18N\2052\StringBundle.xml
|--d:\QQ\AuI18N\config.xml
|--d:\QQ\Bin
复制代码
下面是效果2
|--d:\QQ\af.xml.txd
|--d:\QQ\app.xml.txd
|--d:\QQ
|--d:\QQ\AuI18N
|--d:\QQ\AuI18N\2052\StringBundle.xml
------少了一个文件夹d:\QQ\AuI18N\2052--------
|--d:\QQ\AuI18N\config.xml
|--d:\QQ
|--d:\QQ\Bin\ABL.sys
复制代码
作者:
amen0205
时间:
2013-3-12 04:41
看不出你怎么样是做法1 怎么样是做法2 做法1 是不是不要做法2 用多行注释符注释的那段代码? 做法2是多添上那些代码?
如果按我说的 做法1 就是OK 的
那你的做法2 应该不是我说的这样 因为那样和你的效果2不一样 你的做法2是什么 能说清楚点吗
作者:
fighting
时间:
2013-3-12 12:29
其实这两种方法都是差不多的,29行~31行的代码其实是没有必要的
因为如果是文件的话,listFiles()根本没有执行下面的for循环。
如果不放心的话,可以if判断中计数,可以知道,列出的文件个数是一样的。
我写了一下程序,不知道有没有帮助:
public static void getFile(File f, BufferedWriter buff, int level) throws IOException {
// 如果是目录
if (f.isDirectory()) {
++level;
for(File fs : f.listFiles()){
getFile(fs, buff, level);
}
} else { // 如果是文件
++count; //统计文件的数目
buff.write(getLevel(level) + f.toString());
buff.newLine();
buff.flush();
}
}
复制代码
作者:
fighting
时间:
2013-3-12 12:30
其实这两种方法都是差不多的,29行~31行的代码其实是没有必要的
因为如果是文件的话,listFiles()根本没有执行下面的for循环。
如果不放心的话,可以if判断中计数,可以知道,列出的文件个数是一样的。
我写了一下程序,不知道有没有帮助:
public static void getFile(File f, BufferedWriter buff, int level) throws IOException {
// 如果是目录
if (f.isDirectory()) {
++level;
for(File fs : f.listFiles()){
getFile(fs, buff, level);
}
} else { // 如果是文件
++count; //统计文件的数目
buff.write(getLevel(level) + f.toString());
buff.newLine();
buff.flush();
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2