- ベストアンサー
Javaからのバッチ起動に関して
現在ファイル整理用のプログラムを作っています。 その中でJavaのRuntimeクラスにおけるexecメソッドを使い move *ファイル名* 移動後ディレクトリ という内容のバッチファイルにテキストフィールドから取得したファイル名を渡し カットアンドペーストを行おうと思ったのですが、 この処理だとマッチする条件のファイル量が多いときに途中で何故か止まります。 バッチファイルの内容をコマンドプロンプトから実行するとちゃんと全てのファイル操作が終わるまで動くのですが、原因は何なのでしょうか? 一応、下にその処理をしている部分のコードを書いておきます。 private class ButtonAction implements ActionListener { public void actionPerformed(ActionEvent e) { if(e.getActionCommand().equals("ファイル移動")) { String str=text.getText(); if(str.equals(""))System.out.println("入力してください"); else { Runtime rt=Runtime.getRuntime(); JFileChooser fc=new JFileChooser("D:/Video"); fc.addActionListener(new FileAction()); fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); fc.showOpenDialog(null); if(isok){ try{ rt.exec("C:\\Users\\yuki\\Desktop\\move.bat "+str+" "+path); }catch(Exception err) { err.printStackTrace(); } } } バッチファイルの中身 C: cd "C:\録画" move *%1* %2
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Runtime.exec()で走らせたプロセスが、標準出力に結果を出力しているためではないでしょうか? 標準出力のバッファが小さいため、文字がたくさん出力されるとバッファがいっぱいになってしまいます。 したがって、標準出力から読み捨てるという作業をしなければなりません。 その場限りの対策でよければ、moveするコマンドに文字を出力しないオプションを(あれば)つければいいかもしれませんね。
その他の回答 (1)
- _ranco_
- ベストアンサー率58% (126/214)
> マッチする条件のファイル量が多いときに テキストフィールドでワイルドカードを指定しているということですか? > 途中で何故か止まります。 ファイル移動の操作が止まるんですか? (で、そのあとどうなるの?) なにかほかのことが止まるの? FileActionって何をやっているんですか? isokとpathの値を決めてるだけ? (それならこの同じコード中でshowOpenDialog()でAPROVEを取って、getSelectedFile()したほうが確実堅牢ですね。別のアクションリスナを使うのは無駄。)