java代码实现写一个递归遍历目录下面的所有文件,并对文件进行操作

java的递归遍历

package com.ghl.demo;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;


/**
 * 递归遍历目录下面的所有文件。并对文件进行操作
 * 本代码实现的功能:遍历所有的xml文件(很多的文件夹下都有xml文件),
 * 并根据自己的需要替换相应的值 例如:将xml中jueyuanzi_1 替换为 jueyuanzi
 * 同时根据递归后的文件夹在生成相应的文件夹
 * 1)首先我们要确定原始文件的路径和修改后文件的路径
 * C:\\Users\\TZTX\\Desktop\\annotation\\110kV\7C2\000000\\000000_detection.xml :原始xml存放的路径
 * C:\\Users\\TZTX\\Desktop\\annotation1\\    :修改后xml存放的路径  annotation1是我在桌面上新建的文件夹
 * 2)大家可以看到这两个路径唯一不同的就是最顶层目录,一个是annotation一个是annotation1,都存放在桌面上,然后我想要110kV\7C2\000000\\000000_detection.xml,在我的annotation1中自动给我创建出来
 * 3)按照自己的想法,截取字符串的路径
 * if (file.isFile()) {//如果当前file是文件,
				String absoluteFile = file.getAbsolutePath();拿到当前文件的绝对路径
				String filename = file.getName();//获得当前文件的名字
				int indexOf = absoluteFile.indexOf("annotation")+10;  //indexOf方法是返回当前字符首次出现的位置,所以我加10就可以拿到annotation\\后面的字符,\\算一个字符
				String sub = absoluteFile.substring(indexOf);//然后按照索引来截取  截取结果:\\110kV\7C2\000000\\000000_detection.xml
				sub=sub.substring(0,sub.lastIndexOf(filename));//然后再按照文件名来截取:\\ 110kV\7C2\000000\\
				System.out.println("截取后"+sub);
			
				File fileDir = new File("‪D:\\annotation1"+sub); //然后拼接字符串成为一个完整的路径 ,如果该路径不存在就创建
				if(!fileDir.exists()) {
					boolean mkdirs = fileDir.mkdirs();
					if(mkdirs) {
						System.out.println("mkdirs"+mkdirs);
					}
				}	
 * 
 *解决办法:
 *1、因为我们要改的是xml文件中某一个节点对应的值,只是把这个值替换成我们想要的值,所以我们完全可以把xml文件当成一个文本文件进行操作
 *2、如何实现递归查询所有文件夹下的xml?
 *
 */
public class FileDirectory {
	public static void isDirectory(File file) throws Exception {
		
		if (file.exists()) {//判断当前文件或目录是否存在
			if (file.isFile()) {//如果当前file是文件,
				String absoluteFile = file.getAbsolutePath();
				String filename = file.getName();
				System.out.println(filename);
				int indexOf = absoluteFile.indexOf("annotation")+10;
				String sub = absoluteFile.substring(indexOf);
				sub=sub.substring(0,sub.lastIndexOf(filename));
				System.out.println("截取后"+sub);
				StringBuffer buffer=new StringBuffer();
				buffer.append("C:\\Users\\TZTX\\Desktop\\annotation1").append(sub);
				File fileDir = new File(buffer.toString());
				if(!fileDir.exists()) {
					boolean mkdirs = fileDir.mkdirs();
					if(mkdirs) {
						System.out.println("mkdirs"+mkdirs);
					}
				}	
				BufferedReader br=new BufferedReader(new FileReader(file));//缓冲字符输入流
				BufferedWriter bw =new BufferedWriter(new FileWriter(fileDir+filename));
				
					String line = "";
		            while ((line = br.readLine()) != null) {
		               if(line.contains("jueyuanzi_1")) {
		            	   line = line.replace("jueyuanzi_1", "jueyuanzi");
		               }
		               bw.write(line);
	            	   bw.newLine();
		            }
		            bw.close();
		            br.close();

			} else {

				File[] list = file.listFiles();//拿到当前文件夹下的所有文件和目录
				if (list.length == 0) {
					System.out.println(file.getAbsolutePath() + " 为空");
				} else {
					//遍历File数组 拿到每一个文件或目录
					for (int i = 0; i < list.length; i++) {
						
						isDirectory(list[i]);
					}
				}
			}
		} else {
			System.out.println("目录不存在");
		}
	}

	public static void main(String[] args) throws Exception {
		isDirectory(new File("C:\\Users\\TZTX\\Desktop\\annotation\\"));//路径可根据自己的要求做修改
	}
	
	
}

你可能感兴趣的:(Java基础)