Javaとシェルスクリプトで課題チェック用プログラム(コンパイルが通っているかどうか)
Javaで対象ソース群をコンパイルして成功しているかどうかをまとめてcsvファイルに書き出す
#!/bin/sh hgcc $1 if [ -e ./a.out ]; then echo "コンパイル成功" rm ./a.out else echo "コンパイル失敗" fi
※hgccはHandy Graphicsをコンパイルするのに使用
※シェルスクリプトを使っているのは,Runtimeクラスで,exec("gcc XXX.c")の結果を取得できなかったから(´・ワ・`;)
directory1/directory2/targetFile(対象のソース)に対し,コンパイルを行い,「a.out」があるかどうかで,コンパイルの成功か失敗を判定している(´・ワ・`;)
結果は,result/result.csvに書き込むように設定.
/* 課題チェック用プログラム 実行方法: java CheckWork directory1 */ import java.io.*; public class CheckWork { public static void main(String[] args) throws IOException { CheckWork cw = new CheckWork(); String output = ""; //書き込む情報 output = "targetPath,result\n"; //header cw.exec("mkdir ", "result"); //resultという名のディレクトリを作成 //引数でファイルを読み込み File[] files = getFile(args[0]); for(int i =0; i<files.length; i++) { String filePath = files[i].getPath(); //.DS_Storeが含まれていたら省く if(filePath.indexOf(".DS_Store")!=-1) continue; File[] target = getFile(filePath); for(int j =0; j<target.length; j++) { String targetPath = target[j].getPath(); //.DS_Storeが含まれていたら省く if(targetPath.indexOf(".DS_Store")!=-1) continue; System.out.println("target : "+ targetPath); String result = cw.exec("./compile ", targetPath); System.out.println("result : "+ result+"\n"); output += targetPath+","+result+"\n"; } } write(output, "result.csv"); } public static File[] getFile(String directory) { File dir = new File(directory); File[] files = dir.listFiles(); /*System.out.println("***読み込み***"); for(int i = 0; i < files.length; i++) { System.out.println((i) + ": " + files[i]); } System.out.println("************\n");*/ return files; } public String exec(String cmd, String targetPath) throws IOException { Runtime rt = Runtime.getRuntime(); String execCmd = cmd+targetPath; //実行するコマンド String output = ""; System.out.println(execCmd); Process p = rt.exec(execCmd);//コマンドの実行 //実行結果のストリームを拾得 InputStream is = p.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); //実行結果を出力 String line = ""; while ((line = br.readLine()) != null) { output = line; } br.close(); isr.close(); is.close(); p.destroy(); return output; } public static void write(String output, String file) { File outFile = new File("result/"+file); try{ FileOutputStream fos = new FileOutputStream(outFile, true); OutputStreamWriter osw = new OutputStreamWriter(fos , "Shift-JIS"); BufferedWriter bw = new BufferedWriter(osw); bw.write(output); bw.newLine(); bw.close(); osw.close(); fos.close(); } catch(FileNotFoundException e) { e.printStackTrace(); } catch(IOException e) { e.printStackTrace(); } } }
※自分用:ファイル名に全角・半角の空白等があると,コンパイルが上手くいかないので,Sunskysoft - Shupapan|Shupapanってソフトでリネームすると便利.