- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Runtime.exec()について)
Runtime.exec()について質問させてください
このQ&Aのポイント
- Windowsのサーブレット上でファイル操作を行う際、ファイルの属性ごとにコピーするためにRuntime.exec()からxcopyコマンドを呼び出しています。
- Eclipse上のTomcat6.0では正常にコピーができるが、Tomcat6.0のみではコピーができません(0個のファイルをコピー)。
- 4個の読み取り属性を強制上書きコピーする場合、Eclipse上では成功するがTomcat6上では成功しない。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
「0個のファイルコピーに成功」というメッセージが出るのなら、Tomcat上で実行したときにはコピー元のファイルが無い(見えない)のでしょうね。 動作が変わってしまう原因は、例えばカレントディレクトリや環境変数、実行ユーザの違いが考えられると思います。xcopyの代わりにdirを実行してみるなどすると、何か分かるのではないでしょうか。 それで、「(JavaのAPIでは属性ごとコピー、属性変更ができない!?ため)」と書かれていましたが、Java 6では java.io.File クラスにメソッドが追加されており、基本的な属性の変更は可能です。 「Java SE 6完全攻略」第36回 パーティションの容量とファイルの属性 http://itpro.nikkeibp.co.jp/article/COLUMN/20070629/276339/ に解説があります。勿論、xcopyの方が便利なこともあると思います。 また、上の記事でも使われていますが、java.lang.Runtime#exec() を使うよりも、java.lang.ProcessBuilder クラスを使うほうが少し簡単に書けて便利だと思います。ProcessBuilderクラスは 外部アプリ起動がプチ簡単に ProcessBuilder http://www.javainthebox.net/laboratory/J2SE1.5/TinyTips/ProcessBuilder/ProcessBuilder.html で紹介されています。
お礼
kenichiice様 回答ありがとうございます。 kenichiice様のご指摘どおり、Windowsのサービスとして起動している Tomcatのログオンユーザーを「ローカルシステムアカウント」から 「コンピュータのAdminユーザー」に変更することで見事コピーできました。(内向きネットワークなのでAdminでもセキュリティ上問題無し) Tomcatサービスに実行権限があったとは・・・。 ひとつ勉強になりました。ありがとうございました。m(_ _)m