总是看着别人的代码敲,最近开始自己去写,虽然慢一些,但是思考的和调式的过程可以学到很多的东西。要从简单功能慢慢扩展到自己想要达到的效果,这是个很好的习惯。。。慢慢积累吧。
package com.java.io;
import java.io.File;
/** * 读取一个目录下的所有文件和子文件夹 * @author lzz */
public class ReadDirectoryTest {
public static void main(String[] args) {
String dirName=System.getProperty("user.dir"); //获取classpath的目录
readADir(dirName);
System.out.println("------------我是分割线-----------------");
File dir=new File("E:/study");
readdir(dir,"");
}
/** * 一个目录所在文件夹的所有文件 * @param dirName 当前目录 */
public static void readADir(String dirName){
File dir=new File(dirName);
File predir=dir.getParentFile(); //得到这个目录的父目录
System.out.println(predir); //如果要是根目录,或者是逻辑盘的根目录呢,需要考虑下
if(predir.isDirectory()){
File[] fs=predir.listFiles(); //由父目录得到这个目录所在目录的所有文件类型
for(File f:fs){
System.out.println("-"+f.getName());
}
}
}
/** * 给定一个文件,如果是目录,递归的读取所有目录和文件 * @param file 要读取的文件 * @param str 分级标记 */
public static String next="-";
public static void readdir(File file,String str){ //str是给目录分级的标记,这样容易看清楚
if(file.isDirectory()){ //如果是一个目录,那么继续往下读
System.out.println(str+file.getName());
File[] fs=file.listFiles(); //是目录就读出目录列表在判断
for(File f : fs){
String newstr=str+next; //层级加一
readdir(f,newstr); //递归判断
}
}else{
System.out.println(str+file.getName());
}
}
}
ps: 层级标记开始的时候用的是个成员变量,结果打印出来的效果是 –xx ---xx -----xx ,这样就造成同一次调用的时候显示不同的层级关系了,
为了解决这个问题,就用了以参数来使的这个标记str能在同一次方法调用中保持不变 -xx ---xx.. --xx。 这样的效果就对了。
输出结果:
E:\workspace -.metadata -CMSweb -commenclasses -demoofRMI -fiveballs -FSHloginTest -FSTTEST -html_css -jfinal_demo -JSFLogin -JSFLoginTest -js_study -Log4j -LoginTest -message_board -proxy_pattern -Servers -seurity_java -study -Threadtest -utils -uums -webstudy -XXMLStudy ------------我是分割线----------------- study -dir1 --dir2 --doc2.txt -doc1.txt
第一个方法是说怎么把一个目录下的文件读出来,第二个方法是说在第一个方法上递归就可以这个目录下的目录直到没有目录为止。
代码很简单,呵呵,自己做练习的。
本文出自 “orangleliu笔记本” 博客,请务必保留此出处 http://blog.csdn.net/orangleliu/article/details/38309393