import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
*
* @author zhangfujia
* @time 20111221
*自动扫描文件夹下的文件
*用途:自动扫描脚本输入路径,输出要执行的sql导入数据库;
*/
public class OutSql {
public static String sql ="";
public static String Str_Name_pass =""; //用户名密码
public static String Name_pass_path ="D:\\数据升级辅助\\DB_acount_password.config"; //用户名和密码文件
public static String path ="D:\\数据升级辅助"; //父类文件夹位置
public static String sql_path ="D:\\数据升级辅助\\升级脚本"; //sql文件文件夹位置
public static String Log_path ="D:\\数据升级辅助\\日志\\"; //执行日志文件 文件夹位置
public static String Log_Message =""; //日志信息
public static void main(String[] args) {
// TODO Auto-generated method stub
GetPs(); //获得用户名密码
GetSql(sql_path); //获得sql
System.out.println("sql:"+sql);
ExectorSql(); //执行sql
setLog(); //获取日志
}
/*
* 获取用户名密码
*/
public static void GetPs(){
try {
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(Name_pass_path)));
String data = "";
while((data = br.readLine())!=null)
{
System.out.println(data);
Str_Name_pass +=data;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/*
* 执行数据库自动升级
*/
public static void ExectorSql( ){
char[] inputSqlCmd = sql.toCharArray(); //转换字节 sql转换为char[]类型
String cmd = Str_Name_pass; //启动sqlplus
try {
//创建进程启动sqlplus
Process process = Runtime.getRuntime().exec(cmd);
System.out.println("Str_Name_pass:"+sql);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));
bw.write(inputSqlCmd); //写入进程 写入控制台数据
bw.flush();
bw.close(); // 必须得关闭流,否则无法向子进程中输入信息
String s="";
BufferedReader error = new BufferedReader(new InputStreamReader(process.getInputStream()));//获得输出
while((s=error.readLine())!=null){
System.out.println("控制台输入流:"+s);
Log_Message+=s+"\r\n";
}
try {
process.destroy();
process.waitFor();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/*
* 递归调用查找指定文件加下所有文件
*/
public static String GetSql(String path){
File rootDir = new File(path);
if(!rootDir.isDirectory()){
sql+= "@"+rootDir.getAbsolutePath()+";\r\n";
}else{
String[] fileList = rootDir.list();
for (int i = 0; i < fileList.length; i++) {
path = rootDir.getAbsolutePath()+"\\"+fileList[i];
GetSql(path);
}
}
return sql;
}
/*
* 生成日志文件
*/
public static void setLog(){
Date dt = new Date();
//最后的aa表示“上午”或“下午” HH表示24小时制 如果换成hh表示12小时制
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Log_path +=sdf.format(dt)+".txt";
byte[] bt=Log_Message.getBytes();
try {
FileOutputStream output = new FileOutputStream(Log_path);
output.write(bt);
output.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}