Java:クラスパスのファイルのフルパスを取得 のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- Java:クラスパスのファイルのフルパスを取得 へ行く。
- 1 (2014-07-29 (火) 01:46:12)
- 2 (2014-07-29 (火) 01:53:24)
Java:クラスパスのファイルのフルパスを取得 †
クラスパスに格納しているテストデータ等を、
- XX.getClass().getResourceAsStream?("パス")
で取得したりしますが、このファイルパスが知りたい場合がありました。
具体的には、クラスパスにシェルを格納しておいて、テストの前に実行したかったりしました。
この時に作成したサンプルメソッドです。
public void sample() { String result; String shFilePath = new File(this.getClass() .getResource("/testdata/es/putdata.sh") .getPath()) .getAbsolutePath(); String cmd = "sh " + shFilePath; System.out.println(cmd); try { Runtime rt = Runtime.getRuntime(); Process proc = rt.exec(cmd); final InputStream stdout = proc.getInputStream(); final InputStream stderr = proc.getErrorStream(); // 標準出力を受けて出力するスレッドを作成 Thread outth = new Thread(new Runnable() { public void run() { try { BufferedReader br = new BufferedReader( new InputStreamReader(stdout)); String line; while ((line = br.readLine()) != null) { System.out.println(line); } br.close(); } catch (Exception e) { e.printStackTrace(); } } }); // 標準エラー出力を受けてエラー出力するスレッドを作成 Thread errth = new Thread(new Runnable() { public void run() { try { BufferedReader br = new BufferedReader( new InputStreamReader(stderr)); String line; while ((line = br.readLine()) != null) { System.err.println(line); } br.close(); } catch (Exception e) { e.printStackTrace(); } } }); // スレッドスタート outth.start(); errth.start(); // 外部プロセス終了待ち proc.waitFor(); // スレッド終了待ち outth.join(); errth.join(); // ストリームを閉じる stdout.close(); stderr.close(); // BufferedReader br = new BufferedReader(isr); // while ((result = br.readLine()) != null) { // System.out.println(result); // } } catch (IOException ex) { ex.printStackTrace(); } catch (InterruptedException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } }
ちなみに、このサンプルでは、外部実行したコマンドの標準出力/エラー出力を出力するためにスレッドを使用しています。