ファイルを追加、削除、および読み取るために zip ファイルに頻繁にアクセスする必要があるアプリを開発しています。これらすべてをかなり簡単に実行できることを約束しているため、truezipの使用を検討しています(現在圧縮されているファイルを通過して読み取ることができることが最大の利点です)が、それで遊んでいるとファイルを追加できませんアーカイブ。私のコード:
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() メソッドを呼び出したときに例外が発生します。そうでない場合は、後で innerFile を作成しようとしたときに取得します (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>
インターネット上のほとんどの例は、私が持っているよりも多くの知識を前提としているように見えるので、自分が何をしているのかわからないので、アドバイスをいただければ幸いです。