0

jaxb と XmlStreamWriter を使用して Java で xml ファイルを作成しています。これは非常に大きなファイルになるため、複数の最大ファイルに分割する必要があります。200MB。これらの部分は、もはや読み取り可能な xml であってはなりません。

このファイルの名前は、日付といくつかのパラメーターを使用して非常に具体的であり、最後に「3.1」、「3.2」、「3.3」のように番号が付けられます。最初の数字は作成されたチャンクの数で、2 番目の数字はファイルの次の番号です。ファイル名の最初の部分 (番号付けを除く) は、Java アプリケーションで作成されます。

ここで、必要なパラメーターを指定して Java アプリケーションを呼び出し、ファイルを分割し、チャンクの名前を変更する UNIX スクリプトを作成したいと考えています。

Java アプリケーションを呼び出し、ファイルを分割して名前を変更するコマンドは知っていますが、それらを結合する方法がわかりません。これは、Java アプリケーションのファイル名だけなので、どのファイルを分割して名前を変更する必要があるかを判断できないためです。

誰かがそれに対処する方法を知っていますか?

編集:わかりました、もう少しあいまいにならないようにします。

私が作成したアプリケーションは、非常に大きな xml ファイルを作成します。このファイルの名前は、FI.DB2P.107601.20130130.20010.T.1.1 の形式です。この名前には、いくつかの識別番号と、ファイルが作成された日付が含まれています。名前の最初の部分は、FI.DB2P.107601.20130130.20010.T のように Java アプリケーションで作成されます。

これで、このファイルは最大のいくつかのチャンクに分割されます。それぞれ200MB。次に、作成されたチャンクは「ベースファイル」と同じ名前を持つ必要がありますが、たとえば「T.3.1」、「T.3.2」、および「T.3.3」で終わる必要があります。

私の質問は、Unix スクリプトで Java アプリケーションによって作成されたファイルのファイル名を取得する方法です。ファイル名はかなり複雑で、データベースからのデータが含まれているため、Unix スクリプトで名前を定義できません。

もう少し明確になったことを願っています。

4

2 に答える 2

0

Java プロセスが Unix スクリプトを呼び出して、コマンド ラインでファイル名を渡すことができるわけではありません。

Unix スクリプトは、ファイル名を取得してそのsplit上で何かを実行し、Java プロセスが期待するファイル名にファイル名を修正できます。

于 2013-02-05T20:46:16.707 に答える
0

私があなたの質問を誤解していない限り、それはかなり簡単なはずです。作成するときXMLStreamWriter、ファイルの名前を知っている(うまくいけば):

String fileName = "FI.DB2P.107601.20130130.20010.T.1.1";
XMLStreamWriter writer = factory.createXMLStreamWriter(new FileWriter(fileName ));

次に、この名前をパラメーターとしてシェル スクリプトに渡すことは問題ありません。

Runtime.getRuntime().exec("yourscript.sh " + fileName);

yourscript.shファイルを分割し、インクリメント変数をファイル名に追加するコードが含まれている場合、次のようなものが機能する可能性があります。

#!/bin/bash
split -b 200m -a 5 "$1" splited_file

i=1
for file in splited_file*
do
 mv $file $1_${i}
 i=$(( i + 1 ))
done

ps: このスクリプトはスレッドセーフではありません :)

于 2013-02-05T21:02:21.823 に答える