Java 递归遍历文件夹、示例、读写txt文件

(java实习三2 代码查重)递归遍历文件夹,写文件操作,读文件操作。

一、遍历文件夹 代码模板

递归遍历给定文件夹,寻找指定文件名文件。如果有该文件,控制台输出文件数目和路径。

import java.io.File;
public class lll {
	static File floder = new File("D:\\Demos\\EclipseDemo");   //文件夹路径 
	static String filename = "Test1.java";
	static int num = 0;
	public static void main(String[] args) {
		if(!floder.isDirectory())
		{
			System.out.print("请输入文件夹的正确路径");  
		}
		else{			
			File[]files = floder.listFiles();		
			for (File f:files) {		
				getFile(f,filename);        
			}				
		}
		if(num==0) {
			System.out.print("不存在"+filename+"文件"+"\r\n");
		}
		else{
			System.out.print(filename+"文件数量为:"+num+"\r\n");
		}
	}
	public static void getFile(File f,String str) {		 
		if(f.isDirectory()){    //如果还存在子目录则继续读取
			File[]subfiles = f.listFiles();
			for(File fi:subfiles){
				getFile(fi,str);
			}
		}
		else{		
			if(f.getName().equals(str)) { 
				System.out.print(f.getName()); 
				System.out.print("\n");  
				getData(f);
			}
		}
	}
	public static void getData(File f) {		
		num++;
		System.out.print(f.getPath()+"\n");  
	}
}

输出结果:
在这里插入图片描述

二、写txt文件

递归遍历给定文件夹,寻找指定文件名和文件类型文件。结果新建txt文件写入该文件夹中。输出结果为给定文件类型文件的文件名和数量、给定文件名文件的路径,后者为了在输出结果中显眼加上tab。

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class hhh {
	static File floder = new File("D:\\Demos\\EclipseDemo");   //文件夹路径  "C:\\Users\\Administrator\\Desktop\\test"
	static FileWriter fw = null;             //写文件 txt
	static String filename = "Test1.java";
	static String filetype = ".java";
	static int num1 = 0;
	static int num2 = 0;
	
	public static void main(String[] args) {
		try {
			fw = new FileWriter(floder.getPath() + "/" + "Summary.txt");   
			if(!floder.isDirectory())
			{
				System.out.print("请输入文件夹的正确路径");  
			}
			else{			
				File[]files = floder.listFiles();		
				for (File f:files) {		
					getFile(f,filename,filetype);        
				}				
			}	
			if(num1==0) {
				fw.write("不存在"+filename+"文件"+"\r\n");
			}
			else{
				fw.write(filename+"文件数量为:"+num1+"\r\n");
			}
		
			if(num2==0) {
				fw.write("不存在"+filetype+"类型文件"+"\r\n");
			}
			else{
				fw.write(filetype+"文件数量为:"+num2);
			}			
			fw.flush();
	   		fw.close();    		  		
		}catch (Exception e) {
	    	e.printStackTrace();
	    }		
	}
	public static void getFile(File f,String str,String str2) {		 
		if(f.isDirectory()){    //如果还存在子目录则继续读取
			File[]subfiles = f.listFiles();
			for(File fi:subfiles){
				getFile(fi,str,str2);
			}
		}
		else{		
			if(f.getName().equals(str)) {  
				System.out.print(f.getName()); 
				System.out.print("\n");  
				getData(f);
			}					
			if(f.getName().indexOf(str2)>0 ) {  
				System.out.print(f.getName()); 
				System.out.print("\n");  
				getData2(f);
			}
		}
	}
	public static void getData(File f) {		
		try {
			fw.write("\r\t"+f.getName()+" : ");
			fw.write(f.getPath().substring(floder.getPath().length()+1)+"\r\n");
		} catch (IOException e) {
			e.printStackTrace();
		}
		num1++;
	}	
	public static void getData2(File f) {		
		num2++;	
		try{
			fw.write(f.getName());
			fw.write("\r\n");
		}catch (Exception e) {
    		e.printStackTrace();
    	}	
	}
}

输出结果:
在这里插入图片描述
在这里插入图片描述

三、读txt文件

统计一下带子文件夹的文件夹里 屯的小说的字数
在这里插入图片描述

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class WordCount {
	static FileWriter fw = null;
	
	public static void main(String[] args)throws FileNotFoundException,IOException {
		File f = new File("D:\\All\\novel");    //          C:\\Users\\Administrator\\Desktop\\test
		fw = new FileWriter(f.getPath() + "/" + "字数统计.txt");  
		fw.write("文件名" + "\t\t\t"+"总字数" + "\t" + "汉字加标点"+ "\t" +"\r\n");		
		System.out.print("统计中"+"\r\n");  
		getFile(f,".txt");	
		fw.flush();
	   	fw.close();
	   	System.out.print("统计结束");  
	}

	public static void getFile(File f,String str)throws FileNotFoundException,IOException  {		 
		if(f.isDirectory()){    //如果还存在子目录则继续读取
			File[]subfiles = f.listFiles();
			for(File fi:subfiles){
				getFile(fi,str);
			}
		}
		else{		
			if(f.getName().indexOf(str)>0) {  
				CountNum(f);
			}				
		}
	}
		
	static int num = 0;
	public static void CountNum(File f)throws FileNotFoundException,IOException {
		num++;
		System.out.print("统计第"+num+"个文件"+"\r\n");  
		BufferedReader br = null;
		br = new BufferedReader(new FileReader(f));
		String tempstr; //临时字符串
		int num1 = 0; 	//总汉字数
		int num2 = 0; 	//汉字+标点	
		Pattern pattern =  Pattern.compile("([\u4e00-\u9fa5]{1})"); //纯汉字
		Pattern pattern2 = Pattern.compile("([\u4e00-\u9fa5,,.。、/<>??;;'‘’“”:\"【】{}]{1})"); // 汉字或标点符号   这样双引号算两个标点了		
		while((tempstr = br.readLine()) != null && tempstr != ""){
			//汉字
			Matcher matcher = pattern.matcher(tempstr);
			while(matcher.find()) num1++;	
			//汉字加标点
			Matcher matcher2 = pattern2.matcher(tempstr);
			while(matcher2.find()) num2++;

			tempstr = "";
		}			
		br.close();		
		fw.write(f.getName()+"\t"+num1+"\t"+num2+"\t"+"\r\n");
	}
}

在这里插入图片描述
在这里插入图片描述
好像还不算实用。
后面发现的问题就是好像没有关闭文件夹。

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页