Java写的检索文件&合并文件功能


This give you some example for scanning files with specified string or specified file type from your pointed folder directory.

You can scan the files and copy them to a temporary folder, also you can merge them together into one file.

package com_2013;

import java.io.*;
import java.util.*;

public class FileScan {
 static String fromdir = "Input the folder directory where you need to scan the files.";
 static String todir = "Input the folder directory where you need copy the scanned files to.";
 static String findstr = "Input the string that is specified scanned condition.";
 static String targetFileName = "D:/targetFileName.sql";
 static String filetype = ".sql";
 static int filenum = 1;
 static File outFile;
 static RandomAccessFile outt;

 
 public static void main(String[] args) {
 
  File filedir = new File(fromdir);
 
  FileScan FS = new FileScan();
 
  // Function 1: Scan the files and copy them to a folder.
//  File toDir = new File(todir);
//  if (!toDir.isDirectory()) {
//   toDir.mkdirs();
//  }
//  FS.fileScan(filedir);
 
  // Function 2: Scan the files and merge them into one file.
  try {
   outFile = new File(targetFileName);
   if (!outFile.exists())
    outFile.createNewFile();
   outt = new RandomAccessFile(outFile,"rw");
   FS.fileScanUnite(filedir);
   outt.close();
  } catch (Exception e) {
   e.printStackTrace();
  }
 
 }
 
 public FileScan() {
 }
 
 /**
  * Scan the specified files from the specified folder and unite them together into one file.
  * @param fileDir
  */
 public void fileScanUnite(File fileDir) throws Exception {
  File[] file = fileDir.listFiles();
  for(int i = 0; i < file.length; i ++) {
   File subfile = file[i];
   if (subfile.isDirectory()) {
    fileScanUnite(subfile);
   }else {
    String temp = subfile.getName().toUpperCase();
    if ( temp.indexOf(findstr.toUpperCase())>0 && temp.endsWith(filetype.toUpperCase()) ) {
     RandomAccessFile inn = new RandomAccessFile(subfile,"r");
     int c;
     while ((c=inn.read()) != -1)
      outt.write(c);
     
     System.out.println("Merge file: " + subfile.getPath());
    }
   }
  }
 }
 
 /**
  * Scan the files from the specified folder
  * @param filedir
  */
 public void fileScan(File filedir) {
  File[] file = filedir.listFiles();
  for(int i = 0; i < file.length; i ++) {
   File subfile = file[i];
   if (subfile.isDirectory()) {
    fileScan(subfile);
   }else {
    String temp = subfile.getName().toUpperCase();
    if ( temp.indexOf(findstr.toUpperCase())>0 && temp.endsWith(filetype.toUpperCase()) ) {
     try {
      fileCopy(subfile, new File(todir + findstr + "_" + String.valueOf(filenum++) + filetype ));
     } catch (Exception e) {
      e.printStackTrace();
     }finally {
      System.out.println("Copy file: " + subfile.getPath());
     }
    }
   }
  }
 }
 
 /**
  * Copy the file from f1 to f2sa
  * @param f1
  * @param f2
  * @return
  * @throws Exception
  */
 public long fileCopy(File f1,File f2) throws Exception{
  long time=new Date().getTime();
  int length=2097152;
  FileInputStream in=new FileInputStream(f1);
  FileOutputStream out=new FileOutputStream(f2);
  byte[] buffer=new byte[length];
  while(true){
   int ins=in.read(buffer);
   if(ins==-1){
   in.close();
   out.flush();
   out.close();
   return new Date().getTime()-time;
  }else
   out.write(buffer,0,ins);
  }
 }
 
}

相关内容

    暂无相关文章