2012年4月16日月曜日

javaからjavacコマンドとjavaコマンドを実行

タイトルにかかれてある通りjavaからjavacコマンドとjavaコマンドを実行してみようと思います。

javaからjavacコマンドのような外部コマンドを実行するには、ProcessBuilderクラスを使用します。
今回linux環境で自分のホームフォルダ直下にHello.javaファイルが格納されており、
それをjavaからコンパイル・実行し、結果を出力してみます。
※Hello.javaは"hello"を出力する単純なソースです。


import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class CommandExec {
 public static void main(String[] args) {
  ProcessBuilder pb1 = new ProcessBuilder("javac", "Hello.java");
  pb1.directory(new File(System.getProperty("user.home")));

  try {
   Process process = pb1.start();
   int exit = process.waitFor();
   if (exit != 0) {
    System.out.println("javacコマンド失敗");
    return;
   }

   pb1.command("java", "Hello");
   process = pb1.start();
   exit = process.waitFor();
   if (exit != 0) {
    System.out.println("javaコマンド失敗");
    return;
   }

   InputStream inputStream = process.getInputStream();
   InputStreamReader inputStreamReader = new InputStreamReader(
     inputStream);
   BufferedReader bufferedReader = new BufferedReader(
     inputStreamReader);
   String line = bufferedReader.readLine();

   while (line != null) {
    System.out.println(line);
    line = bufferedReader.readLine();
   }

  } catch (IOException e) {
   e.printStackTrace();
  } catch (InterruptedException e) {
   e.printStackTrace();
  }
 }
}

2012年4月8日日曜日

Java7 globbing patternでファイル一覧取得

久々の更新です。Java7で新規追加されたjava.nio.file.Filesパッケージ
内のクラスを使ってプログタイトルに書かれてあるとおりglobbing patternで指定したディレクトリのファイル一覧を取得してみます。
※globbing pattern・・・・・正規表現のような表現

import java.io.IOException;
import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class FileGlobbingSample {
 public static void main(String[] args) {
  Path path = Paths.get(System.getProperty("user.home"));
  
  try (DirectoryStream<Path> directoryStream = Files.newDirectoryStream(path, "*.java")) {
   for (Path p : directoryStream) {
    System.out.println(p.getFileName());
   }
  } catch (IOException ie) {
   ie.printStackTrace();
  }
 }
}

FilesクラスのnewDirectoryStreamメソッドの第二引数にglobbing patternを記述します。
以下の記述で拡張子が「java」のファイルを取得するように指定しています。
Files.newDirectoryStream(path, "*.java")