Java I/O递归查找文件

来源:互联网 发布:linux默认安装目录 编辑:程序博客网 时间:2024/05/16 16:59

今天老板突然吩咐一个任务给我,把公共盘的资料整理一遍,我问要怎么整,他说把大于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();    }}



0 0
原创粉丝点击