Java I/O递归查找文件

17 篇文章 0 订阅

今天老板突然吩咐一个任务给我,把公共盘的资料整理一遍,我问要怎么整,他说把大于1g的文件都找出来,,,,,我这时有千万个草泥马在心中奔驰而过,但没办法,总不能拒绝老板的要求啊。

一想到我最近不是在学java吗,于是就写了下面的一个小程序(勉强能看),轻松解决了老板这个特殊“任务”!

 

PS:楼主目前还是一位机械狗,正在学习java准备转行!

 

package ioStream;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.util.ArrayList;

public class FileChaxun {
       
       public static void main(String[] args) throws Exception {
              
              findFiles("X:\\10 Department Management 部门管理\\ENG 工程部"); 
              
              findMaxFiles("X:\\10 Department Management 部门管理\\ENG 工程部");
              
              
       }
       
       //查找文件,并把文件路径、文件名称、文件大小写进files.txt中
       public static void findFiles(String filePath) throws Exception {
              
              File div=new File(filePath);
              ArrayList<File> fileList = new ArrayList<File>();
              
              fileToList(div,fileList);
              
              File fileName=new File(div,"files.doc");
              fileToWrite(fileList,fileName);
       }
       
       //查找大于1024MB的文件,并把文件路径、文件名称、文件大小写进maxFiles.txt中
       public static void findMaxFiles(String filePath) throws Exception {
              File div=new File(filePath);
              ArrayList<File> maxFileList = new ArrayList<File>();
              
              fileToList(div,maxFileList);
              
              File maxfliesName=new File(div,"maxFiles.doc");
              maxFileToWrite(maxFileList,maxfliesName);
       }
       
       //递归,把文件对象写进一个集合中
       private static void fileToList(File div, ArrayList<File> fileList) {
              
              File[] filesArr=div.listFiles();
              for(File f:filesArr){
                     if(f.isDirectory()){
                           fileToList(f,fileList);
                     }
                     
                     fileList.add(f);
              }
       }
       //把文件路径、文件名称、文件大小写进files.txt中
       private static void fileToWrite(ArrayList<File> fileList, File fileName) throws Exception {
              
              BufferedWriter bufferedWriter=
                           new BufferedWriter(new FileWriter(fileName));
              
              for(File f:fileList){
                     long fileLenth=f.length()/1024/1024;
                     if(fileLenth!=0){
                           bufferedWriter.write("-------------------------------------------------------------");
                           bufferedWriter.newLine();
                           bufferedWriter.write("文件路径:"+f.getParent()+"  "+"文件名称:"+
                                                                     f.getName()+"---文件大小:"+fileLenth+"MB");
                           bufferedWriter.newLine();
                           bufferedWriter.flush();
                     }
              }
              bufferedWriter.close();
       }
       
       //把大于1024MB的文件路径、文件名称、文件大小写进maxFiles.txt中
       private static void maxFileToWrite(ArrayList<File> maxFileList, File maxfliesName)
                     throws Exception{
              
              BufferedWriter bufferedWriter=
                           new BufferedWriter(new FileWriter(maxfliesName));
              
              for(File file:maxFileList){
                     
                     long mb=1024;
                     long fileLength=file.length()/1024/1024;
                     if(fileLength>mb){
                           bufferedWriter.write("-------------------------------------------------------------");
                           bufferedWriter.newLine();
                           bufferedWriter.write("文件路径:"+file.getParent()+"  "+"文件名称:"+
                                                                     file.getName()+"---文件大小:"+fileLength+"MB");
                           bufferedWriter.newLine();
                           bufferedWriter.flush();
                     }
              }
              
              bufferedWriter.close();
       }
}

 

 

在原有基础上,对代码进行了精简,并增加了多线程,搜起来爽歪歪有木有!

 

package io;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
public class FindFilesThread {
   
    public static void main(String[] args) throws Exception {
          
          Runnable findFiles=new FindFiles("X:\\10 Department Management 部门管理\\GM 总经办");
          Runnable findFiles2=new FindFiles("X:\\10 Department Management 部门管理\\ENG 工程部");
          new Thread(findFiles).start();
          new Thread(findFiles2).start();
    }
}
class FindFiles implements Runnable{
       
       private String filePath=null;
       
       public FindFiles(String filePath) {
              this.filePath=filePath;
       }
       
       @Override
       public void run() {
              File div=new File(filePath);
        ArrayList<File> fileList = new ArrayList<File>();
       
        filesToList(div,fileList);
       
        File fileName=new File(div,"files.doc");
        File maxfliesName=new File(div,"maxFiles.doc");
        try {
              
                filesToWrite(fileList,fileName,maxfliesName);
                     
              } catch (Exception e) {
                     e.printStackTrace();
              }
       }
       
        //递归,把文件对象写进一个集合中
    private static void filesToList(File div, ArrayList<File> fileList) {
          
           File[] filesArr=div.listFiles();
           for(File f:filesArr){
                  if(f.isDirectory()){
                        filesToList(f,fileList);
                  }
           
           fileList.add(f);
           }
    }
   
    //遍历集合,把文件信息写进磁盘
    private static void filesToWrite(ArrayList<File> fileList, File fileName,File maxfliesName)
              throws Exception {
          
           BufferedWriter filesWriter=
                        new BufferedWriter(new FileWriter(fileName));
          
           BufferedWriter maxFileWriter=
                        new BufferedWriter(new FileWriter(maxfliesName));
          
           for(File f:fileList){
                  long fileLenth=f.length()/1024/1024;
                  if(fileLenth>0&&fileLenth<1024)
                	  writer(f,filesWriter,fileLenth);
                  if(fileLenth>1024){
                	  writer(f,maxFileWriter,fileLenth);
                  }
           }
           filesWriter.close();
           maxFileWriter.close();
    }
    
    private static void writer(File f,BufferedWriter buff,long fileLenth)
    		throws IOException {
    	
    	buff.write("-------------------------------------------------------------");
    	buff.newLine();
    	buff.write("文件路径:"+f.getParent()+"  "+"文件名称:"+
                    f.getName()+"---文件大小:"+fileLenth+"MB");
    	buff.newLine();
    	buff.flush();
	}
}

 

再想了想,决定弄个内部类来玩玩,

 

 

package io;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;

public class FindFilesIn {
   
    public Runnable findFilesByRunnable(String filePath){
    	
    	return new FindFiles(filePath);
    }
    
   private  class FindFiles implements Runnable{
        
        private String filePath=null;
        
        public FindFiles(String filePath) {
               this.filePath=filePath;
        }
        
        @Override
        public void run() {
               File div=new File(filePath);
         ArrayList<File> fileList = new ArrayList<File>();
        
         filesToList(div,fileList);
        
         File fileName=new File(div,"files.doc");
         File maxfliesName=new File(div,"maxFiles.doc");
         try {
               
                 filesToWrite(fileList,fileName,maxfliesName);
                      
               } catch (Exception e) {
                      e.printStackTrace();
               }
        }
        
         //递归,把文件对象写进一个集合中
     private void filesToList(File div, ArrayList<File> fileList) {
           
            File[] filesArr=div.listFiles();
            for(File f:filesArr){
                   if(f.isDirectory()){
                         filesToList(f,fileList);
                   }
            
            fileList.add(f);
            }
     }
    
     //遍历集合,把文件信息写进磁盘
     private void filesToWrite(ArrayList<File> fileList, File fileName,File maxfliesName)
               throws Exception {
           
            BufferedWriter filesWriter=
                         new BufferedWriter(new FileWriter(fileName));
           
            BufferedWriter maxFileWriter=
                         new BufferedWriter(new FileWriter(maxfliesName));
           
            for(File f:fileList){
                   long fileLenth=f.length()/1024/1024;
                   if(fileLenth>0&&fileLenth<1024)
                 	  writer(f,filesWriter,fileLenth);
                   if(fileLenth>1024){
                 	  writer(f,maxFileWriter,fileLenth);
                   }
            }
            filesWriter.close();
            maxFileWriter.close();
     }
     
     private void writer(File f,BufferedWriter buff,long fileLenth)
     		throws IOException {
     	
     	buff.write("-------------------------------------------------------------");
     	buff.newLine();
     	buff.write("文件路径:"+f.getParent()+"  "+"文件名称:"+
                     f.getName()+"---文件大小:"+fileLenth+"MB");
     	buff.newLine();
     	buff.flush();
 	}
 }
}

 

 

调用

 

package io;

public class FindFilesDemo {
	
	public static void main(String[] args) throws Exception {
        
    	FindFilesIn findFilesIn=new FindFilesIn();
    
        Runnable findFiles=findFilesIn.findFilesByRunnable("E:\\视频");
        Runnable findFiles2=findFilesIn.findFilesByRunnable("E:\\下载");
        
        new Thread(findFiles).start();
        new Thread(findFiles2).start();
    }
}

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值