108 lines · 2.2 KB · Java
RawDownload
package javal; import java.io.File;import java.io.FileOutputStream;import java.io.FileInputStream;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.io.EOFException;  class FileMerge{	/**	 * open the two files and merge. The "tmpname"	 * is the newer generated file, name is the older	 * file and will become the merged file	 */	static void Merge( String name, String tmpname ) throws IOException	{		// rename 'name'		String oldname = "old_"+ name;		File   old_f   = new File(oldname);		if ( old_f.exists() )			old_f.delete();		new File( name ).renameTo( old_f ); 		// open output for merged file		DataOutputStream      merge;		DataInputStream  ftmp, fold;				merge = new DataOutputStream(new FileOutputStream( name ) );		ftmp  = new DataInputStream( new FileInputStream( tmpname ) );		fold  = new DataInputStream( new FileInputStream( oldname ) ); 		while ( true )		{			try			{				ReadNWrite( ftmp, merge, "#>>" );				Ignore( ftmp, "#<<" );			}			catch ( EOFException ee )			{				WriteRest( fold, merge );				break;			}			try			{				Ignore( fold, "#>>" );				ReadNWrite( fold, merge, "#<<" );			}			catch ( EOFException ee )			{				WriteRest( ftmp, merge );				break;			}		} 		fold.close();		ftmp.close();		merge.close();		new File( tmpname ).delete(); 	}  	private static void ReadNWrite( DataInputStream fin, DataOutputStream fout, String pat ) throws IOException	{		String line; 		do		{			line = fin.readLine();			if ( line == null ) throw new EOFException();			fout.writeBytes( line );			fout.writeBytes( linesep );		}		while ( line.indexOf(pat) == -1 );	}  	private static void Ignore( DataInputStream fin, String pat ) throws IOException	{		String line;		do		{			line = fin.readLine();			if ( line == null ) throw new EOFException();		}		while ( line.indexOf(pat) == -1 );	} 	private static void WriteRest( DataInputStream fin, DataOutputStream fout ) throws IOException	{		while ( true )		{			String line = fin.readLine();			if (line == null) 				return;			fout.writeBytes(line);			fout.writeBytes( linesep );		}	} 	private static String linesep = System.getProperties().getProperty("line.separator"); }