home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

Java/「現在ディレクトリ」(Current Working Directory)の変更

Java/「現在ディレクトリ」(Current Working Directory)の変更

Java / 「現在ディレクトリ」(Current Working Directory)の変更
id: 1213 所有者: msakamoto-sf    作成日: 2013-07-14 15:32:13
カテゴリ: Java 

Javaで、「現在ディレクトリ」(Current Working Directory)は変更出来るか?

→答え:「現在ディレクトリの変更」が、unixで言うところのchdir(2), WindowsAPIでのSetCurrentDirectory()を呼ぶ、という意味であれば、JDK 1.7現在でもJDKライブラリの世界だけでは出来ません。それらのAPIを叩くインターフェイスが用意されてないっぽい。

もちろんchdir(2)とかSetCurrentDirectory()を呼ぶJNIを作成して叩かせるとかすれば無理やり出来ると思いますが、そもそもJDKはそういう状況を想定していないため、アチコチで嵌りそうな気がします。

→ただし、「ファイル名解決に使う現在ディレクトリを変更する」という意味であれば回避策はあるようです。

Fileクラスのコンストラクタには、ファイル名解決に使う親ディレクトリの有無でバリエーションがあります。親ディレクトリが指定されていれば、そこを現在ディレクトリとして相対パスを解決します。指定されていない(むしろそちらのほうがよく使われる)コンストラクタでは、System.getProperty("user.dir")を使って相対パスを解決します。

つまり、Fileクラスのコンストラクタによるファイル名の解決においては、System.getProperty("user.dir")がデフォルトの「Current Working Directory」であり、「Current Working Directory」を変更したければ、単にFileクラスのコンストラクタでparentを指定するバージョンを使い、parentに自前で用意した「現在ディレクトリ」を指すFileオブジェクトを指定すればよい、という流れになります。

※System.setProperty("user.dir", ...)しちゃっても大丈夫かどうかはちょっと自信ないです・・・。

→もしも「外部プロセスを起動した時の現在ディレクトリを変更する」という意味であれば、ProcessBuilderを使うことで現在ディレクトリを明示的に指定して、外部プロセスを起動することが可能です。(多分、ProcessBuilderのdirectory()メソッドでイケる・・・筈・・・)

参考資料:



プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2013-07-14 15:47:01
md5:b8ce675f8e7ed9b2f8636ecf2ed04dbf
sha1:48d74cef9f703dadf8844f653deb79616b300609
コメント
コメントを投稿するにはログインして下さい。