Java:クラスパスのファイルのフルパスを取得
Last-modified: 2014-11-16 (日) 14:26:34 (3238d)
Top / Java:クラスパスのファイルのフルパスを取得
Java:クラスパスのファイルのフルパスを取得 †
クラスパスに格納しているファイルを、
- 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(); } }
ちなみに、このサンプルでは、外部実行したコマンドの標準出力/エラー出力を出力するためにスレッドを使用しています。