Java:クラスパスのファイルのフルパスを取得 の変更点
Top / Java:クラスパスのファイルのフルパスを取得
- 追加された行はこの色です。
- 削除された行はこの色です。
- Java:クラスパスのファイルのフルパスを取得 へ行く。
- Java:クラスパスのファイルのフルパスを取得 の差分を削除
*Java:クラスパスのファイルのフルパスを取得 [#ia0bd475] クラスパスに格納しているファイルを、 -XX.getClass().getResourceAsStream("パス") で取得したりしますが、このファイルの絶対パスが知りたい場合がありました。 こんな感じのメソッドで実現できます。 public static String getFullPath(String resourcePath){ return new File("".getClass().getResource(resourcePath).getPath()).getAbsolutePath(); } 具体的には、クラスパスにシェルを格納しておいて、テストの前に実行したかったりしました。 この時に作成したサンプルメソッドです。 public void sample() { String result; String shFilePath = new File(this.getClass() .getResource("/testdata/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(); } } ちなみに、このサンプルでは、外部実行したコマンドの標準出力/エラー出力を出力するためにスレッドを使用しています。