OSDN Git Service

0dc062ffc519285730781e4230759e1ada969608
[hayashilib/hayashi.git] / src / jp / co / areaweb / tools / command / Command.java
1 package jp.co.areaweb.tools.command;\r
2 import java.io.*;\r
3 \r
4 public class Command\r
5 {\r
6     public static final boolean debug = false;\r
7     private java.lang.String cmd;    /** プロパティ cmd(実行するコマンドライン)。 */\r
8     private java.io.File workDir;   /** プロパティ workDir の値 */\r
9     private BufferedReader stdReader = null;   // 標準出力\r
10     private BufferedReader errReader = null;   // エラー出力\r
11     \r
12     /** \r
13      * コマンドを実行しその出力ストリームを取得\r
14      * @exception IOException I/Oエラーが発生した場合\r
15      */\r
16     public void execCommand() throws IOException {\r
17         if (debug){\r
18             System.out.println("[Command s] " + cmd);\r
19         }\r
20 \r
21         if ((getCmd() == null) || getCmd().equals("")) {\r
22             return;\r
23         }\r
24 \r
25         // コマンドを実行\r
26         Process process;\r
27         if (getWorkDir() == null) {\r
28             process = Runtime.getRuntime().exec(getCmd());\r
29         }\r
30         else {\r
31             process = Runtime.getRuntime().exec(getCmd(), null, getWorkDir());\r
32         }\r
33         try { \r
34             process.waitFor();  // コマンド終了まで待機\r
35         } catch (InterruptedException e) {}\r
36 \r
37         if (debug) {\r
38             System.out.println("[Command e] "+ getCmd() +"\n");\r
39         }\r
40 \r
41         // コマンド標準エラー出力を取得\r
42         this.errReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));\r
43 \r
44         // コマンド標準出力の入力ストリームを取得\r
45         this.stdReader = new BufferedReader(new InputStreamReader(process.getInputStream()));\r
46 \r
47         return;\r
48     }\r
49     \r
50     /**\r
51      *  コマンド実行結果\r
52      *  標準出力とエラー出力の結果を合成してかえす。\r
53      *  よって、本メソッドを実行するとgetStdout(),getErrout()は無効になる\r
54      *  このメソッドは、execCommand()メソッドを実行した直後の1回目の実行結果のみ有効\r
55      *  @return result\r
56      *  @throws IOException             例外\r
57      */\r
58     public String getOutput() throws IOException {\r
59         String std = getStdout();\r
60         if (std.equals("")) {\r
61             return getErrout();\r
62         }\r
63         else {\r
64             return std +"\n"+ getErrout();\r
65         }\r
66     }\r
67     \r
68     /**\r
69      *  コマンド実行結果の標準出力\r
70      *  このメソッドは、execCommand()メソッドを実行した直後の1回目の実行結果のみ有効\r
71      *  @throws IOException     例外\r
72      *  @return 結果\r
73      */\r
74     public String getStdout() throws IOException {\r
75         return convBufferedReader(this.stdReader);\r
76     }\r
77     \r
78     /**\r
79      *  コマンド実行結果のエラー出力\r
80      *  このメソッドは、execCommand()メソッドを実行した直後の1回目の実行結果のみ有効\r
81      *  @throws IOException     例外\r
82      *  @return 結果\r
83      */\r
84     public String getErrout() throws IOException {\r
85         return convBufferedReader(this.errReader);\r
86     }\r
87     \r
88     private static String convBufferedReader(BufferedReader reader) throws IOException {\r
89         if (reader == null) {\r
90             return "";\r
91         }\r
92         StringBuffer strbuf = new StringBuffer();\r
93         for (String line; (line = reader.readLine()) != null; strbuf.append(line +"\n"));\r
94         reader.close();\r
95         reader = null;\r
96         return strbuf.toString();\r
97     }\r
98     \r
99     /** プロパティ cmd の取得メソッド。\r
100      * @return プロパティ cmd の値。\r
101      */\r
102     public String getCmd() {\r
103         return cmd;\r
104     }\r
105     \r
106     /** プロパティ cmd の設定メソッド。\r
107      * @param cmd プロパティ cmd の新しい値。\r
108      */\r
109     public void setCmd(String cmd) {\r
110         this.cmd = cmd;\r
111     }\r
112     \r
113     /** プロパティ workDir の取得メソッド。\r
114      * @return プロパティ workDir の値。\r
115      */\r
116     public java.io.File getWorkDir() {\r
117         return workDir;\r
118     }\r
119     \r
120     /** プロパティ workDir の設定メソッド。\r
121      * @param workDir プロパティ workDir の新しい値。\r
122      */\r
123     public void setWorkDir(java.io.File workDir) {\r
124         this.workDir = workDir;\r
125     }\r
126 \r
127     /** \r
128     *   サンプル\r
129     * @param args       パラメータ\r
130     */\r
131     static public void main(String[] args) {\r
132         if (args.length < 1) {\r
133             System.out.println("exp: java tool.job.Command [commandLine]");\r
134             return;\r
135         }\r
136         String commandLine = "";\r
137         for (int i=0; i < args.length; i++) {\r
138             if (i != 0) {\r
139                 commandLine += " ";\r
140             }\r
141             commandLine += args[i];\r
142         }\r
143 \r
144         // エラー結果と実行結果を別々に取り出す\r
145         System.out.println(commandLine);\r
146         Command command = new Command();\r
147         String stdout = "";\r
148         String errout = "";\r
149         try {\r
150             command.setCmd(commandLine);\r
151             command.setWorkDir(null);\r
152             command.execCommand();\r
153             stdout = command.getStdout();\r
154             errout = command.getErrout();\r
155             System.out.println("STD_OUT:");\r
156             System.out.println(stdout);\r
157             System.out.println("STD_ERROR:");\r
158             System.out.println(errout);\r
159         }\r
160         catch (Exception e) {\r
161             e.printStackTrace();\r
162         }\r
163 \r
164         // エラー結果と実行結果をいっしょに取り出す\r
165         System.out.println(commandLine);\r
166         command = new Command();\r
167         try {\r
168             command.setCmd(commandLine);\r
169             command.setWorkDir(null);\r
170             command.execCommand();\r
171             System.out.println(command.getOutput());\r
172         }\r
173         catch (Exception e) {\r
174             e.printStackTrace();\r
175         }\r
176     }\r
177 }\r