玖叶教程网

前端编程开发入门

java递归打印目录树

/**

* 通过递归创建/打印目录树

*/

public class TestFile2 {

public static boolean createDirOrFile(File f,boolean file){

if (file){

if (f.isFile()){

return false;

//如果路径已存在 返回false创建操作未执行

}

File upper = f.getParentFile();

if (upper.isDirectory()){

//如果父目录存在则创建该文件

try {

f.createNewFile();

} catch (IOException e) {

throw new RuntimeException(e);

}

return true;

}

createDir(upper);

//如果不存在父目录则调用 createDir()方法创建父目录 之后再创建文件

try {

f.createNewFile();

} catch (IOException e) {

throw new RuntimeException(e);

}

return true;

}

//如果想创建的不是文件 file为false 即创建目录

//下面的语句不需要else括起来 如果file为true执行完上面语句已经return了不会向下执行

if (f.isDirectory()){

//判断目标目录是否存在

return false;

}

File upper = f.getParentFile();

if (upper.isDirectory()){

f.mkdir();

return true;

}

createDir(upper);

//同样判断父目录是否存在 存在即创建f目录 不存在则创建父目录之后再创建f

f.mkdir();

return true;

}

private static void createDir(File dir){

//该方法为类的方法static在类内部进行调用 不需要供外部使用 所以private 内部使用不需要查看结果 所以void

//因为createDirOrFile()方法内已经判定目录dir不存在了 这里不需要再次判断

File upperDir = dir.getParentFile();

if (upperDir.isDirectory()){

//判断这一层目录的父目录是否存在

//.exists()无法区分目录和文件 只要路径一致都会true

dir.mkdir();

}else{

createDir(upperDir);

//递归 如果父目录不存在则调用本方法创建父目录的父目录 如果还不存在则再往上一层创建 直到某一层判断父目录存在后创建子目录结束方法 前一层createDir()才继续向下进行

dir.mkdir();

}

}

public static void main(String[] args) {

File mp4 = new File("C:/abc/def/ghi/m.mp4");

System.out.println(createDirOrFile(mp4,true));

for (int i =1;i<5;i++){

createDirOrFile(new File("C:/abc/def/p"+i+".jpg"),true);

}

}

}

class TestFile3{

public static void printFileList(File f){

//打印文件/目录树

if (!f.exists()){

System.out.println("目标不存在");

}else {

printFileList(f,0);

}

}

private static void printFileList(File f,int n){

//private私有 外部通过printFileList(File f)调用 免得传n=0

for (int i = 0;i<n;i++){

System.out.print("-");

//用n来区分目录树的层级 每深入一层就多打印一个 "-"

}

System.out.println(f.getName());

File[] subList = f.listFiles();

//.listFiles() 如果f的路径 denote象征 一个目录 则返回包含该目录下所有文件的File[]数组 如果f不是目录则返回null 如果是空目录则返回File[0]

if (subList != null){

for (File subListFile:subList){

//for-each循环

printFileList(subListFile,n+1);

//递归 每深入一层都使n++ 下一层同样经过打印文件名、判断是否目录、是目录再深入一层 直到某一层是文件不执行printFileList方法并结束这一层

}

}

}

public static void main(String[] args) {

printFileList(new File("C:/abc"));

}

public static void printDirAndMp4(File f,int n){

if (f.isDirectory()||f.getName().toLowerCase().endsWith(".mp4")){

//忽略大小写 先全部变为小写 再匹配.mp4

for (int i = 0;i<n;i++){

System.out.print("-");

}

System.out.println(f.getName());

}

//如果不是目录或者mp4则不打印

File[] subList = f.listFiles();

//.listFiles()返回数组File[]

if (subList != null){

for (File subListFile:subList){

//遍历子目录

printDirAndMp4(subListFile,n+1);

//递归 逐层递进打印所有目录和mp4

}

}

}

public static void printJpgOnly(File f){

if (f.isDirectory()){

File[] subList = f.listFiles();

if (subList != null){

for (File subListFile:subList){

printJpgOnly(subListFile);

//递归

}

}

} else if (f.getName().toLowerCase().endsWith(".jpg")) {

//.endsWith() 路径字符串以.jpg结尾 即为jpg文件

System.out.println(f.getPath());

}

//如果既不是目录也不是jpg文件 跳过if和elif语句块结束方法

}

}

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言