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