Runtime.exec()について質問させて下さい。
現在、Windowsのサーブレット上のファイル操作で
ファイルの属性ごと(読み取り専用)コピーしたいので
Runtime.exec()からxcopyコマンドを呼び出してコピーしています。
(JavaのAPIでは属性ごとコピー、属性変更ができない!?ため)
エディタはeclipse3.5を使用しております。
eclipse上のTomcat6.0では綺麗にコピーしてくれるのですが、
Tomcat6.0のみでの実行ではコピーできません(0個のファイルをコピー)
eclipse3.5上のTomcat設定とTomcat自体のJVM設定でのJREパスは同じJRE
を参照しています。常にEclipseを起動させた状態!!ってのは厳しいので
なんとかTomcatのみでコピーを成功させたいので助言お願いいたします。
下記ソースで 4個の読み取り属性を強制上書きコピーしますと、表示は
Eclipse3.5上では → 「4個のファイルコピーに成功」表示
Tomcat6上では → 「0個のファイルコピーに成功」表示
となります。。。
【以下ソース】
CopyFrom = "コピー元パス";
CopyTo = "コピー先パス";
try{
String[] cmd = new String[]{"cmd","/c","xcopy",CopyFrom+"*.*",CopyTo,"/y","/r","/k","/h"};
Runtime Run = Runtime.getRuntime();
Process process = Run.exec(cmd);
//実行結果取得
InputStream is = process.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String Line = null;
while((Line = br.readLine()) != null){
System.out.println(Line);
}
}catch(IOException e){
System.out.println(e);
}
【環境】
・Windows Server2003
・Java1.6.0_13(パスは通しています)
・Tomcat6.0.14
No.1ベストアンサー
- 回答日時:
「0個のファイルコピーに成功」というメッセージが出るのなら、Tomcat上で実行したときにはコピー元のファイルが無い(見えない)のでしょうね。
動作が変わってしまう原因は、例えばカレントディレクトリや環境変数、実行ユーザの違いが考えられると思います。xcopyの代わりにdirを実行してみるなどすると、何か分かるのではないでしょうか。
それで、「(JavaのAPIでは属性ごとコピー、属性変更ができない!?ため)」と書かれていましたが、Java 6では java.io.File クラスにメソッドが追加されており、基本的な属性の変更は可能です。
「Java SE 6完全攻略」第36回 パーティションの容量とファイルの属性
http://itpro.nikkeibp.co.jp/article/COLUMN/20070 …
に解説があります。勿論、xcopyの方が便利なこともあると思います。
また、上の記事でも使われていますが、java.lang.Runtime#exec() を使うよりも、java.lang.ProcessBuilder クラスを使うほうが少し簡単に書けて便利だと思います。ProcessBuilderクラスは
外部アプリ起動がプチ簡単に ProcessBuilder
http://www.javainthebox.net/laboratory/J2SE1.5/T …
で紹介されています。
kenichiice様
回答ありがとうございます。
kenichiice様のご指摘どおり、Windowsのサービスとして起動している
Tomcatのログオンユーザーを「ローカルシステムアカウント」から
「コンピュータのAdminユーザー」に変更することで見事コピーできました。(内向きネットワークなのでAdminでもセキュリティ上問題無し)
Tomcatサービスに実行権限があったとは・・・。
ひとつ勉強になりました。ありがとうございました。m(_ _)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
- PHP eclipse pleiades phpのインストールについて 1 2023/02/03 17:15
- Excel(エクセル) 1つのファイルを3つのフォルダにファイル名を【明日の日付】にして、コピーをしたい 2 2022/12/21 17:43
- Visual Basic(VBA) シートをコピーする下記記述でダイアログを用いた記述がわかりません?( A = Dir(ThisWor 4 2022/08/22 12:26
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 11:27
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 12:30
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/05/24 08:33
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Windows 10 USBにwindows10をいれて起動する方法 5 2022/04/14 14:29
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで複数のコメントのサ...
-
エクセルのハイパーリンクがコ...
-
FTPとファイルコピーの違いにつ...
-
バッチファイル XCOPYで上書き...
-
AVIUTlって iPadでも使えますか?
-
エクセルVBAで開いているファイ...
-
バッチファイルのコピーで
-
frxファイルの役目
-
VB6でのファイルコピーの終了検...
-
FSO.CopyFileでのエラー無視方法
-
アクセス クエリを別のファイ...
-
xcopyでのバッチコピー方法でコ...
-
[エクセル]コピーするとオブジ...
-
LAN接続HDD(LinkStation)で削...
-
同じファイル名 上書きしないフ...
-
ファイルサーバ上のファイルが...
-
ハイフネーションされている英...
-
エクセルファイルに「コピー」...
-
VBSで作成したフォルダにファイ...
-
外部RSS利用の考え方、著作権な...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで複数のコメントのサ...
-
バッチファイル XCOPYで上書き...
-
frxファイルの役目
-
エクセルVBAで開いているファイ...
-
エクセルのハイパーリンクがコ...
-
バッチファイル 別ファイルにリ...
-
[エクセル]コピーするとオブジ...
-
Vba初心者です。下記のコード助...
-
ファイルサーバ上のファイルが...
-
Gitについて質問。 クローンし...
-
エクセル2010、図が大きすぎま...
-
バッチファイルのコピーで
-
現在のブックを閉じないで、マ...
-
エクセルのマクロについて教え...
-
vbsでExcelのシートをコピーす...
-
同じファイル名 上書きしないフ...
-
アクセス クエリを別のファイ...
-
マインクラフトPCをプレイしよ...
-
xcopyでのバッチコピー方法でコ...
-
開いている別のファイルにExcel...
おすすめ情報