私は最近、自分のプロジェクトのランチャーを作成することにしました。サーバーから更新されたファイルをダウンロードして解凍し、一部のファイルをマージして (ランチャーの設定によって内容が異なるため)、1 つの .zip ファイルにパックするだけです。
ダウンロードとマージのプロセスは完全に機能すると確信していますが、最後のプロセスである圧縮は機能しません。
圧縮するための私のコードは次のとおりです。
-- 動かないコードはここにありました。--
.zip ファイルは正しく作成されていますが、ゲーム ディレクトリに配置すると、ゲームが起動しません (破損していると表示されます)。しかし、WinRar で開くと (はい、エラーなしで開きます。「テスト」機能でもエラーは表示されません)、ランダムなファイルを 1 つ追加するだけで、ゲームが開始されます。
WinRar は正しい方法で zip ファイルを再作成するようですが、ランチャーで再作成することはできません。
何か案は?
編集1:
動作するはずの別のコードを見つけました:
private static void zipDir(String zipFileName, String dir) throws Exception {
File dirObj = new File(dir);
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFileName));
System.out.println("Creating : " + zipFileName);
addDir(dirObj, out);
out.close();
}
static void addDir(File dirObj, ZipOutputStream out) throws IOException {
File[] files = dirObj.listFiles();
byte[] tmpBuf = new byte[1024];
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory()) {
addDir(files[i], out);
continue;
}
String fap = files[i].getAbsolutePath();
String rel_path = fap.substring(fap.indexOf("wypakowane") + 11).replace("\\", "/");
FileInputStream in = new FileInputStream(fap);
System.out.println(" Adding: " + rel_path);
out.putNextEntry(new ZipEntry(rel_path));
int len;
while ((len = in.read(tmpBuf)) > 0) {
out.write(tmpBuf, 0, len);
}
out.closeEntry();
in.close();
}
}
ZIPファイル内にディレクトリを作成すると思います。残念ながら、まだゲームが起動しません... (「wypakowane」は、ZIP ファイルに入れたいすべてのファイルを含むディレクトリです。)
編集2:
両方のアーカイブを比較しました.1つは私のJavaアプリで作成されたもので、もう1つはWinRarがランダムなファイルを追加して作成したものです。それらは同一であり、同じ CRC、同じ属性を持ち、正しく解凍されます。しかし、ゲームは最初のものでクラッシュし、2番目のものでスムーズに実行されます. 私はアイデアが不足しています。何か助けはありますか?