2011-12-09 13 views
0

ファイルを追加、削除、および読み込むためにzipファイルに頻繁にアクセスする必要があるアプリケーションを開発しています。私はこれらのすべてをかなり簡単に行うことができることを約束しているので、私は真のジップを使用していると思っています(現在ZIPファイルからの読み込みが最大の利点です)。アーカイブ。私のコード:TrueZipを使用してアーカイブ内にファイルを作成しようとするとEOF例外が発生する

public void testfunction() 
{ 
    //below create the archive if it doesn't exist 
    TFile tFile = new TFile("src\\test\\resources\\archiveTest\\demoZip.zip"); 
    if (!tFile.exists()) // I get an EOFException here 
    { 
     tFile.createNewFile(); 
    } 

    TFile innerFile = new TFile("src\\test\\resources\\archiveTest\\demoZip.zip\\someText.txt"); 
    innerFile.createNewFile(); // also here 

    BufferedWriter out = new BufferedWriter(new FileWriter(innerFile)); 

    out.write("demo text"); 
    out.close(); // I know this is bad 
} 

これを実行すると、この単純なものをどのように整列しようとしても、java.io.EOFExceptionが発生します。ファイルがすでに作成されていることを確認しようとすると、tFile.exists()メソッドを呼び出すと例外が発生します。そうでなければ、後で内部ファイルを作成しようとすると(zipファイルがすでに存在していても)取得します。

私は注意する必要があります:truezipアーキタイプの例はTApplicationクラスを使用していますが、それはできません。私はこのライブラリをかなり使いやすくする必要があります。私はアプリケーションの構造を変更することができないので、アプリケーションそのものをTApplicationサブクラスにすることは実行可能な解決策ではありません(ただし、私は必要な呼び出しクラスの構造を変更できます)。

現時点では私のPOMは、これらの依存関係(私が見つけた例から付属)を備えて:

<dependency> 
    <groupId>de.schlichtherle.truezip</groupId> 
    <artifactId>truezip-file</artifactId> 
    <version>7.4.1</version> 
</dependency> 
<dependency> 
    <groupId>de.schlichtherle.truezip</groupId> 
    <artifactId>truezip-driver-zip</artifactId> 
    <version>7.4.1</version> 
</dependency> 
    <dependency> 
    <groupId>de.schlichtherle.truezip</groupId> 
    <artifactId>truezip-kernel</artifactId> 
    <version>7.4.1</version> 
</dependency> 
<dependency> 
    <groupId>de.schlichtherle.truezip</groupId> 
    <artifactId>truezip-driver-file</artifactId> 
    <version>7.4.1</version> 
</dependency> 

だから私は、私は私が得ることができる任意のアドバイスは上のほとんどの例として高く評価されるだろうそうやってさっぱりだがインターネットは私が持っているより多くの知識を引き受けるようです。

答えて

0

あなたのPOMの設定が正しいに見えるので、このようなものが動作するはずです:1を作成するために、あなたはTFile.mkdir(呼び出しますので、アーカイブファイルは、仮想ディレクトリであることを

public void testfunction() 
{ 
    TFile innerFile = new TFile("src/test/resources/archiveTest/demoZip.zip/someText.txt"); 

    BufferedWriter out = new BufferedWriter(new FileWriter(innerFile)); 
    try { 
     out.write("demo text"); 
    } finally { 
     out.close(); 
    } 
} 

マインド)、 TFile.createNewFile()ではありません。 ただし、アーカイブファイルを最初に作成する必要はありません。それが既に存在しない場合、自動的に作成されます。プロジェクトのMaven原型を使用した場合

あなたはより多くの例を見つけることができます:http://truezip.java.net/kick-start/index.html

P.S:TrueZIP 7.4.2がリリースされました - あなたの依存関係を更新してください。

関連する問題