java 进程控制台输入输出流 (oracle自动升级工具开发源码)

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();
  }
 }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值