kyukyunyorituryo / AozoraEpub3

青空文庫テキスト→ePub3変換
http://www18.atwiki.jp/hmdev/
Other
144 stars 14 forks source link

junrar他の廃止メソッドの最新化 #23

Closed happynow closed 8 months ago

happynow commented 8 months ago

非推奨メソッド junrarライブラリ/getFileNameW, getFileNameString について

rarファイル内のファイル名を取得する際、現行コードでは、まず getFileNameW を呼び出して Unicode のファイル名の取得を試みます。それが失敗したら getFileNameString で ASCII コードのファイル名を取得します。

https://github.com/kyukyunyorituryo/AozoraEpub3/blob/82ac2046c88954798b17c0038485a3f7aad3215f/src/com/github/hmdev/image/ImageInfoReader.java#L260-L261

junrar 7.5.5 API の資料によれば、このような処理は getFileName のひとつの呼び出しに置き換えられます。

Method Returns Status
[getFileNameW](https://javadoc.io/doc/com.github.junrar/junrar/latest/com/github/junrar/rarfile/FileHeader.html#getFileNameW()) the Unicode filename, or null if the filename is ASCII only 廃止 As of 7.2.0, replaced by getFileName()
[getFileNameString](https://javadoc.io/doc/com.github.junrar/junrar/latest/com/github/junrar/rarfile/FileHeader.html#getFileNameString()) the ASCII filename. 廃止 As of 7.2.0, replaced by getFileName()
[getFileName](https://javadoc.io/doc/com.github.junrar/junrar/latest/com/github/junrar/rarfile/FileHeader.html#getFileName()) the Unicode filename if it exists, else the ASCII filename 推奨

非推奨メソッド apacheライブラリ/getNextZipEntry について

JavaDoc [Class ZipArchiveInputStream](https://commons.apache.org/proper/commons-compress/apidocs/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.html#getNextEntry()) には getNextZipEntrygetNextEntry に置き換えるよう書かれています

Method Returns Status
[getNextZipEntry](https://commons.apache.org/proper/commons-compress/apidocs/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.html#getNextZipEntry()) the next entry. 廃止 Use getNextEntry
[getNextEntry](https://commons.apache.org/proper/commons-compress/apidocs/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.html#getNextEntry()) the next entry, or null if there are no more entries. 推奨

zf がクローズされていないという警告の対応

下記 ImageInfoReader.java366行目return null が実行されるとき zf がクローズされないと警告されてました。

 ZipFile zf = new ZipFile(this.srcFile, "MS932");
 ZipArchiveEntry entry = zf.getEntry(srcImageFileName);
 if (entry == null) {
     srcImageFileName = this.correctExt(srcImageFileName);
     entry = zf.getEntry(srcImageFileName);
     if (entry == null) return null;  //<----------ここでリターンする際、zf がクローズされない
 }
 InputStream is = zf.getInputStream(entry);
 try {
     return ImageUtils.readImage(srcImageFileName.substring(srcImageFileName.last...
 } catch (Exception e) {
     e.printStackTrace();
 } finally {
     is.close();
     zf.close();
 }

InputStreamクラスはもちろん apache の ZipFile クラスも java.io.Closeable を実装しているので try-with-resources 文を使えます。それを使うように修正しました。

ここの処理は「変換前確認」の画面で動きます。以下のとおり動作確認しました。

  1. 画面右下のチェックボックス「変換前確認」をオンにする
  2. 画像の格納されたZIP圧縮ファイルを画面にドラッグ&ドロップする
  3. 変確認画面の右側の画像エディタで次の画像に切り替え、画像が切り替わるか確認する。

非推奨メソッド getCount() の対応は見送り

getCountメソッドでもDeprecatedの警告が出てますが、もう少し調査します。今回は修正を見送ります。