Javaプログラムからbashスクリプトを実行し、データの断片を取り込み、操作して分割します。(Java)変更されたディレクトリ(bashスクリプト経由)はfolder.listfilesに反映されていません
bashスクリプトが動作するかどうかは問題ではありません。ディレクトリ内の分割ファイルを確認できます。
は
その後
try
{
Process proc = Runtime.getRuntime().exec("bash " + SCRIPT_DIR + "/" + SPLIT_SCRIPT_NAME + " " + args[_MESSAGES_PER_UPLOAD_] + " " + args[_MAXIMUM_MESSAGES_PER_FEED_] + " " + (60000*Integer.parseInt(args[_DURATION_BEFORE_EACH_UPLOAD_IN_MINUTES_])/Integer.parseInt(args[_DURATION_OF_EACH_FEED_IN_MILLISECONDS_])));
proc.waitFor();
}
catch(IOException e) { error(e); }
String fileNames;
File folder = new File(DATA_DIR);
File[] filesToUpload = folder.listFiles();
for (int i = 0; i < filesToUpload.length; ++i)
if (filesToUpload[i].isFile())
{
fileNames = filesToUpload[i].getName();
System.out.println(fileNames);
}
が大型ファイルを印刷します、ではない...
$ lsのデータ/
dataChunk_00000 dataChunk_00001 /元のファイルは、データの "大型ファイル" だったと言います dataChunk_00002 dataChunk_00003 dataChunk_00004 dataChunk_00005 dataChunk_00006 dataChunk_00007 dataChunk_00008 dataChunk_00009 dataChunk_00010 dataChunk_00011 dataChunk_00012 dataChunk_00013 dataChunk_00014 dataChunk_00015 dataChunk_00016 dataChunk_00017 dataChunk_00018 dataChunk_00019 dataChunk_00020 dataChunk_00021 dataChunk_00022 dataChunk_00023 dataChunk_00024 dataChunk_ 00025 dataChunk_00026 dataChunk_00027
私はこれがコンパイラの最適化か何かを推測しています。
編集:誰かが私になぜproc.waitFor()がうまくいかないか、そして/またはこれを解決するためのより良い方法を説明できたら、私はそれを高く評価します。
bashスクリプトのコンテンツを共有できますか?または、少なくともそれが何をしているのかを説明してください。 –
さて、ここでやっているのと同じように、 '.exec(String)'の代わりに 'Runtime.exec(String [])'を使うべきです。 'Runtime.exec()'はシェルやパーサーではなく、クォートやエスケープを尊重しません。 'exec(String)'がスペースを盲目的に分割するため、すべての引数を単一の文字列で指定すると、引数の予期しない扱いにつながることがあります。 –