トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

Java:クラスパスのファイルのフルパスを取得 のバックアップ差分(No.2)


  • 追加された行はこの色です。
  • 削除された行はこの色です。
*Java:クラスパスのファイルのフルパスを取得 [#ia0bd475]


クラスパスに格納しているテストデータ等を、
クラスパスに格納しているファイルを、

-XX.getClass().getResourceAsStream("パス")

で取得したりしますが、このファイルパスが知りたい場合がありました。
で取得したりしますが、このファイルの絶対パスが知りたい場合がありました。

具体的には、クラスパスにシェルを格納しておいて、テストの前に実行したかったりしました。

この時に作成したサンプルメソッドです。


 public void sample() {
 	String result;
 	String shFilePath = 
 			new File(this.getClass()
 					.getResource("/testdata/es/putdata.sh")
 					.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();
 	}
 }

ちなみに、このサンプルでは、外部実行したコマンドの標準出力/エラー出力を出力するためにスレッドを使用しています。