#navi_header|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()メソッドでイケる・・・筈・・・) 参考資料: - Changing the current working directory in Java? - Stack Overflow -- http://stackoverflow.com/questions/840190/changing-the-current-working-directory-in-java - Java Applications and the "Current Directory" -- http://www.devx.com/tips/Tip/13804 #navi_footer|Java|