Java는 폴더, 예제를 재귀 적으로 탐색하고 txt 파일을 읽고 씁니다.

(자바 연습 3 2 코드 검사) 폴더를 재귀 적으로 탐색, 파일 쓰기 작업, 파일 읽기 작업.

1. 폴더 코드 템플릿 트래버스

지정된 폴더를 재귀 적으로 탐색하여 지정된 파일 이름을 가진 파일을 찾습니다. 그러한 파일이 있으면 콘솔은 파일의 번호와 경로를 출력합니다.

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 파일이 폴더에 기록됩니다. 출력 결과는 주어진 파일 유형의 파일 이름과 파일 번호, 주어진 파일 이름을 가진 파일의 경로이며, 후자는 출력 결과에서 눈에 잘 띄도록 탭으로 표시됩니다.

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 파일 읽기

하위 폴더가있는 폴더에있는 Litun의 소설에있는 단어 수를 센다.
여기에 사진 설명 삽입

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");
	}
}

여기에 사진 설명 삽입
여기에 사진 설명 삽입
아직 실용적이지 않은 것 같습니다.
나중에 발견 된 문제는 폴더가 닫혀 있지 않은 것 같습니다.

추천

출처blog.csdn.net/qq_43144103/article/details/107292685