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);
}
}
}
Additionally, we can use below script to unite files which have the same type.
FileUnite.java
package com.file;
import java.io.*;
public class FileUnite {
static String fileName = "D:/autusys_all.jil";
static String filterFolder = "E:/myApplication/autosys";
static String filterName = ".jil";
public static void main(String[] args) {
FileUnite FU = new FileUnite();
try {
FU.Unite(fileName, filterFolder, filterName);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public FileUnite() {
}
public void Unite(String fileName, String filterFolder, final String filterName) throws Exception {
File[] files;
File inFile = new File(filterFolder);
File outFile = new File(fileName);
if (!outFile.exists())
outFile.createNewFile();
RandomAccessFile outt = new RandomAccessFile(outFile,"rw");
// Scan the files with filter name
files = inFile.listFiles(new FilenameFilter() {
public boolean accept(File dir, String name) {
String rr = new File(name).toString();
return rr.endsWith(filterName);
}
});
// Print the files
for (int i=0;i<files.length;i++) {
System.out.println(files[i]);
}
// Open all the files and write them into one file
for (int i=0;i<files.length;i++) {
RandomAccessFile inn = new RandomAccessFile(files[i],"r");
int c;
while ((c=inn.read()) != -1)
outt.write(c);
}
outt.close();
}
}