package net.tqm.view.action;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import net.tqm.view.FileUtil;
public class SplitByTable
{
public static void act( JButton splitByTable )
{
splitByTable.addMouseListener( new MouseAdapter()
{
@Override
public void mousePressed( MouseEvent e )
{
File origFile;
if( ( origFile = FileUtil.selectFile( "D:\\" ) ) == null )
{
JOptionPane.showMessageDialog( null, "没选择文件" );
return;
}
split( origFile );
}
} );
}
private static void split( File origFile )
{
BufferedReader reader = null;
try
{
System.out.println( "以行为单位读取文件内容,一次读一整行:" );
reader = new BufferedReader( new FileReader( origFile ) );
HashMap<String, File> tabMap = new HashMap<String, File>();
int i = 0, fileCount = 0;
String tempString = null, useDB = null, tailName = "";
String[] splitName = origFile.getName().split( "-" );
for( int j = 3; j < splitName.length; j++ )
{
tailName = tailName + "-" + splitName[j];
}
String firstPartName = splitName[0] + "-" + splitName[1] + "-" + splitName[2];
File newFile = new File( origFile.getAbsolutePath().substring( 0,
origFile.getAbsolutePath().lastIndexOf( "\\" ) )
+ "\\" + firstPartName + ( fileCount++ ) + tailName );
newFile.createNewFile();
while( ( tempString = reader.readLine() ) != null )
{
if( tempString.trim().startsWith( "delete from " ) || tempString.trim().startsWith( "DELETE FROM " ) )
{
tabMap.put( tempString.split( " " )[2], newFile );
reader.close();
break;
}
}
reader = new BufferedReader( new FileReader( origFile ) );
FileOutputStream writer = new FileOutputStream( newFile, true );
// 一次读入一行,直到读入null为文件结束
while( ( tempString = reader.readLine() ) != null )
{
if( i++ == 0 )
{
useDB = tempString;
}
if( tempString.trim().startsWith( "delete from " ) || tempString.trim().startsWith( "DELETE FROM " ) )
{
if( !tabMap.containsKey( tempString.split( " " )[2] ) )
{
tabMap.put(
tempString.split( " " )[2],
new File( origFile.getAbsolutePath().substring( 0,
origFile.getAbsolutePath().lastIndexOf( "\\" ) )
+ "\\" + firstPartName + ( fileCount++ ) + tailName ) );
}
}
if( tempString.trim().startsWith( "delete from " ) || tempString.trim().startsWith( "DELETE FROM " )
|| tempString.trim().startsWith( "INSERT INTO " ) || tempString.trim().startsWith( "insert into " ) )
{
if( tabMap.containsKey( tempString.split( " " )[2] ) )
{
newFile = tabMap.get( tempString.split( " " )[2] );
int newFileStart = 1;
if( newFile.createNewFile() )
{
newFileStart = 0;
}
writer = new FileOutputStream( newFile, true );
if( newFileStart == 0 )
{
writer.write( useDB.getBytes() );
writer.write( "\n".getBytes() );
}
writer.write( tempString.getBytes() );
writer.write( "\n".getBytes() );
}
}
else
{
if( i == 1 )
{
writer.write( useDB.getBytes() );
writer.write( "\n".getBytes() );
writer.flush();
writer.close();
}
writer = new FileOutputStream( newFile, true );
writer.write( tempString.getBytes() );
writer.write( "\n".getBytes() );
}
writer.flush();
writer.close();
}
writer.close();
reader.close();
}
catch( IOException e )
{
e.printStackTrace();
}
finally
{
if( reader != null )
{
try
{
reader.close();
}
catch( IOException e1 )
{
}
}
}
}
}