use of com.github.junrar.Archive in project AozoraEpub3 by hmdev.
the class AozoraEpub3 method getTextInputStream.
/** 入力ファイルからStreamオープン
*
* @param srcFile
* @param ext
* @param imageInfoReader
* @param txtIdx テキストファイルのZip内の位置
* @return テキストファイルのストリーム (close()は呼び出し側ですること)
* @throws RarException
*/
public static InputStream getTextInputStream(File srcFile, String ext, ImageInfoReader imageInfoReader, String[] textEntryName, int txtIdx) throws IOException, RarException {
if ("txt".equals(ext)) {
return new FileInputStream(srcFile);
} else if ("zip".equals(ext) || "txtz".equals(ext)) {
//Zipなら最初のtxt
ZipArchiveInputStream zis = new ZipArchiveInputStream(new BufferedInputStream(new FileInputStream(srcFile), 65536), "MS932", false);
ArchiveEntry entry;
while ((entry = zis.getNextEntry()) != null) {
String entryName = entry.getName();
if (entryName.substring(entryName.lastIndexOf('.') + 1).equalsIgnoreCase("txt") && txtIdx-- == 0) {
if (imageInfoReader != null)
imageInfoReader.setArchiveTextEntry(entryName);
if (textEntryName != null)
textEntryName[0] = entryName;
return zis;
}
}
LogAppender.append("zip内にtxtファイルがありません: ");
LogAppender.println(srcFile.getName());
return null;
} else if ("rar".equals(ext)) {
//tempのtxtファイル作成
Archive archive = new Archive(srcFile);
try {
FileHeader fileHeader = archive.nextFileHeader();
while (fileHeader != null) {
if (!fileHeader.isDirectory()) {
String entryName = fileHeader.getFileNameW();
if (entryName.length() == 0)
entryName = fileHeader.getFileNameString();
entryName = entryName.replace('\\', '/');
if (entryName.substring(entryName.lastIndexOf('.') + 1).equalsIgnoreCase("txt") && txtIdx-- == 0) {
if (imageInfoReader != null)
imageInfoReader.setArchiveTextEntry(entryName);
if (textEntryName != null)
textEntryName[0] = entryName;
//tmpファイルにコピーして終了時に削除
File tmpFile = File.createTempFile("rarTmp", "txt");
tmpFile.deleteOnExit();
FileOutputStream fos = new FileOutputStream(tmpFile);
InputStream is = archive.getInputStream(fileHeader);
try {
IOUtils.copy(is, fos);
} finally {
is.close();
fos.close();
}
return new BufferedInputStream(new FileInputStream(tmpFile), 65536);
}
}
fileHeader = archive.nextFileHeader();
}
} finally {
archive.close();
}
LogAppender.append("rar内にtxtファイルがありません: ");
LogAppender.println(srcFile.getName());
return null;
} else {
LogAppender.append("txt, zip, rar, txtz, cbz のみ変換可能です: ");
LogAppender.println(srcFile.getPath());
}
return null;
}
use of com.github.junrar.Archive in project AozoraEpub3 by hmdev.
the class AozoraEpub3 method countRarText.
/** Ripファイル内のテキストファイルの数を取得 */
public static int countRarText(File rarFile) throws IOException, RarException {
int txtCount = 0;
Archive archive = new Archive(rarFile);
try {
for (FileHeader fileHeader : archive.getFileHeaders()) {
if (!fileHeader.isDirectory()) {
String entryName = fileHeader.getFileNameW();
if (entryName.length() == 0)
entryName = fileHeader.getFileNameString();
entryName = entryName.replace('\\', '/');
if (entryName.substring(entryName.lastIndexOf('.') + 1).equalsIgnoreCase("txt"))
txtCount++;
}
}
} finally {
archive.close();
}
return txtCount;
}
Aggregations