2012-02-03 5 views
1

zipファイルまたはgzipファイルに効率的に行を追加できますか?Java zip append行

私は株式市場データを直接ファイルシステムに保存していますが、私は約5msごとに更新されている約40種類のファイルを持っています。

どうすればよいですか?

+0

Zipファイルには*行*が含まれていませんが、ファイルが含まれています。 –

+2

ようこそスタックオーバーフローへ。あなたの質問には詳細がないので、私たちはあなたを助けることができないのではないかと心配しています。これまでに何を試みましたか?その結果は何ですか? http://stackoverflow.com/questions/how-to-ask –

+1

5ミリ秒ごとに40個のファイルを含むzipファイルを更新してください。私はとても怖いです –

答えて

1

zipファイルではなくデータベースを使用します。

+3

ダンプデータを格納するフラットファイルが推奨されます –

0

zipファイルを編集するサイクルが完了すると、あまりにも多くのオーバーヘッドが発生します。私はいくつかの合理的なレート(すなわち、5秒またはそれ以上)でメモリの変更を蓄積し、ターゲットファイルを変更する方が良いと思う。

1
  1. データベースをお勧めします。
  2. プレーンテキストファイルを実際に使用する場合は、ファイルシステムに直接ファイルを置いてください(Linuxを使用している場合は、適切なファイルシステムを選択してください)。
  3. あなたは、プレーンテキストファイルを使用して、zipファイルにテキストファイルを置き、以下のzipファイルシステムをチェックしたい場合:

java.nio.file.FileSystems:
http://docs.oracle.com/javase/7/docs/technotes/guides/io/fsp/zipfilesystemprovider.html

Java SE 7リリースで導入されたzipファイルシステムプロバイダは、カスタムファイルシステムプロバイダの実装です。 zipファイルシステムプロバイダは、zipまたはJARファイルをファイルシステムとして扱い、ファイルの内容を操作する機能を提供します。 zipファイルシステムプロバイダは、複数のファイルシステム(各zipファイルまたはJARファイルに対して1つのファイルシステム)を作成します。

TrueZip
http://truezip.java.net/

TrueZIPが、彼らは単なるディレクトリ

であるかのようにアーカイブファイルへの透過的なアクセスを提供する仮想ファイルシステム(VFS)のためのJavaベースのプラグインフレームワークであります

メモリをキャッシュに使用し、ディスク操作を減らし、書き込みを非ブロックにしてください。

0

ZipOutputStreamのwriteメソッドを使用すると、指定したオフセットで書き込むことができます。

String filepath = new String("/tmp/updated.txt") 
FileOutputStream fout = new FileOutputStream("/tmp/example.zip"); 
ZipOutputStream zout = new ZipOutputStream(fout); 
byte[] file = IOUtils.toByteArray(mWriter.toString()); 
short yourOffset = 0; 

ZipEntry ze = new ZipEntry(filepath); 
try { 
    zout.putNextEntry(ze); 
    zout.write(file, yourOffset, file.length); 
    zout.closeEntry(); 
} catch(Exception e) { 
    e.printStackTrace(); 
} 

あなたは、Apache CommonsのIOUtilsを使用してバイト配列(輸入org.apache.commons.io.IOUtils)にファイルを変換する場合は、あなたのオフセットどこラインに書き込みを呼び出すことにより、zipエントリを書き換えると置き換えることができますあなたが編集を開始したい。この場合、ファイル全体が0からfile.lengthに書き込まれます。 zip内のファイルを置き換えるには、ドライブ上の更新されたファイルへのパスを指定してZipEntryを作成します。

関連する問題