Combine all source files of java program into single file without duplicate entry of contents into file.
This is the program that writes all java source program to single file without duplicate entry of contents into file.
/*
This is the program that writes all java source program to single file without duplicate entry
of contents into file.
*/
import java.io.*;
import java.util.*;
public class CombineJava4{
static int count=0;
static Check c=new Check();
static FileOutputStream fos;
static ArrayList<File> written=new ArrayList<File>();
static File destFile;
public static void main(String ar[])throws Exception{
Scanner scan=new Scanner(System.in);
System.out.println("Enter source Directory");
String dir=scan.nextLine();
System.out.println("Enter the Destination file name with ext.");
String dest=scan.nextLine();
destFile=new File(dest);
//path of file in which data to be written
fos=new FileOutputStream(dest);
//PASS THE PATH OF DIRECTORY
combine(dir);
fos.close();
System.out.println("\nFinished");
}
/**
*this method will search file into directory recurcivaly
*/
public static void combine( String dir)throws Exception{
File f=new File(dir);
String list[]=f.list();
for(int i=0;i<list.length;i++){
String filename=list[i];
File f2=new File(f,filename);
if(!f2.isFile()){
System.out.println(f2.getPath());
combine(f2.getPath());
}else{
if(f2.getName().endsWith(".java")&(!f2.getPath().equals(destFile.getPath()))){
if(!c.duplecate(written,f2)){
count++;
System.out.println("\tWriting file ="+f2.getName());
writeToFile(f2);
}
//else
//System.out.println("Duplecate file ="+f2.getName());
}
}
}
}
/**
*This method will write contend of file passing as parameter to output stream object [fos]
*/
public static void writeToFile(File name) throws IOException{
FileInputStream fis=new FileInputStream(name);
//FileOutputStream fos=new FileOutputStream("E:/Tatal.java",true);
//fos.write(new String("\n<<<<<<<<<<<<[ "+count+"-"+name.getPath()+" ]>>>>>>>>>>>>>>\n").getBytes());
fos.write(new String("\n==================[ "+count+"-"+name.getName()+" ]====================\n").getBytes());
int x=0;
while((x=fis.read())!=-1){
fos.write(x);
}
written.add(name);
}
}
class Check{
boolean isSame(File f1,File f2)throws Exception{
boolean same =true;
InputStreamReader isr1=new InputStreamReader(new FileInputStream(f1));
InputStreamReader isr2=new InputStreamReader(new FileInputStream(f2));
BufferedReader br1=new BufferedReader(isr1);
BufferedReader br2=new BufferedReader(isr2);
String s1,s2;
while((s1=br1.readLine())!=null){
s2=br2.readLine();
//System.out.println("\t"+s1+"\n\t"+s2);
if(!s1.equals(s2)){
same=false;
//System.out.println(f1.getPath()+" is same as "+f2.getPath());
return same;
}
}
return same;
}
boolean duplecate(ArrayList<File> list,File file)throws Exception{
boolean exist=false;
for(File f:list){
if(f.getName().equals(file.getName()))
{
//System.out.println(f.getName()+" matches ");
if(isSame(f,file))
return true;
}
}
return exist;
}
}
/*
This is the program that writes all java source program to single file without duplicate entry
of contents into file.
*/
import java.io.*;
import java.util.*;
public class CombineJava4{
static int count=0;
static Check c=new Check();
static FileOutputStream fos;
static ArrayList<File> written=new ArrayList<File>();
static File destFile;
public static void main(String ar[])throws Exception{
Scanner scan=new Scanner(System.in);
System.out.println("Enter source Directory");
String dir=scan.nextLine();
System.out.println("Enter the Destination file name with ext.");
String dest=scan.nextLine();
destFile=new File(dest);
//path of file in which data to be written
fos=new FileOutputStream(dest);
//PASS THE PATH OF DIRECTORY
combine(dir);
fos.close();
System.out.println("\nFinished");
}
/**
*this method will search file into directory recurcivaly
*/
public static void combine( String dir)throws Exception{
File f=new File(dir);
String list[]=f.list();
for(int i=0;i<list.length;i++){
String filename=list[i];
File f2=new File(f,filename);
if(!f2.isFile()){
System.out.println(f2.getPath());
combine(f2.getPath());
}else{
if(f2.getName().endsWith(".java")&(!f2.getPath().equals(destFile.getPath()))){
if(!c.duplecate(written,f2)){
count++;
System.out.println("\tWriting file ="+f2.getName());
writeToFile(f2);
}
//else
//System.out.println("Duplecate file ="+f2.getName());
}
}
}
}
/**
*This method will write contend of file passing as parameter to output stream object [fos]
*/
public static void writeToFile(File name) throws IOException{
FileInputStream fis=new FileInputStream(name);
//FileOutputStream fos=new FileOutputStream("E:/Tatal.java",true);
//fos.write(new String("\n<<<<<<<<<<<<[ "+count+"-"+name.getPath()+" ]>>>>>>>>>>>>>>\n").getBytes());
fos.write(new String("\n==================[ "+count+"-"+name.getName()+" ]====================\n").getBytes());
int x=0;
while((x=fis.read())!=-1){
fos.write(x);
}
written.add(name);
}
}
class Check{
boolean isSame(File f1,File f2)throws Exception{
boolean same =true;
InputStreamReader isr1=new InputStreamReader(new FileInputStream(f1));
InputStreamReader isr2=new InputStreamReader(new FileInputStream(f2));
BufferedReader br1=new BufferedReader(isr1);
BufferedReader br2=new BufferedReader(isr2);
String s1,s2;
while((s1=br1.readLine())!=null){
s2=br2.readLine();
//System.out.println("\t"+s1+"\n\t"+s2);
if(!s1.equals(s2)){
same=false;
//System.out.println(f1.getPath()+" is same as "+f2.getPath());
return same;
}
}
return same;
}
boolean duplecate(ArrayList<File> list,File file)throws Exception{
boolean exist=false;
for(File f:list){
if(f.getName().equals(file.getName()))
{
//System.out.println(f.getName()+" matches ");
if(isSame(f,file))
return true;
}
}
return exist;
}
}
Comments