
com.github.junrar.util.VolumeHelper Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of junrar Show documentation
Show all versions of junrar Show documentation
rar decompression library in plain java
package com.github.junrar.util;
/**
*
* @author alban
*/
public class VolumeHelper {
private VolumeHelper() {
}
// public static boolean mergeArchive(Archive archive, ComprDataIO dataIO)
// throws IOException {
// FileHeader hd = dataIO.getSubHeader();
// if (hd.getUnpVersion() >= 20 && hd.getFileCRC() != 0xffffffff
// && dataIO.getPackedCRC() != ~hd.getFileCRC()) {
// System.err.println("Data Bad CRC");
// }
//
// boolean oldNumbering = !archive.getMainHeader().isNewNumbering()
// || archive.isOldFormat();
// String nextName = nextVolumeName(archive.getFile().getAbsolutePath(),
// oldNumbering);
// File nextVolume = new File(nextName);
// UnrarCallback callback = archive.getUnrarCallback();
// if ((callback != null) && !callback.isNextVolumeReady(nextVolume)) {
// return false;
// }
// if (!nextVolume.exists()) {
// return false;
// }
// archive.setFile(nextVolume);
// hd = archive.nextFileHeader();
// if (hd == null) {
// return false;
// }
// dataIO.init(hd);
// return true;
// }
public static String nextVolumeName(String arcName, boolean oldNumbering) {
if (!oldNumbering) {
// part1.rar, part2.rar, ...
int len = arcName.length();
int indexR = len - 1;
while ((indexR >= 0) && !isDigit(arcName.charAt(indexR))) {
indexR--;
}
int index = indexR + 1;
int indexL = indexR - 1;
while ((indexL >= 0) && isDigit(arcName.charAt(indexL))) {
indexL--;
}
if (indexL < 0) {
return null;
}
indexL++;
StringBuilder buffer = new StringBuilder(len);
buffer.append(arcName, 0, indexL);
char[] digits = new char[indexR - indexL + 1];
arcName.getChars(indexL, indexR + 1, digits, 0);
indexR = digits.length - 1;
while ((indexR >= 0) && (++digits[indexR]) == '9' + 1) {
digits[indexR] = '0';
indexR--;
}
if (indexR < 0) {
buffer.append('1');
}
buffer.append(digits);
buffer.append(arcName, index, len);
return buffer.toString();
} else {
// .rar, .r00, .r01, ...
int len = arcName.length();
if ((len <= 4) || (arcName.charAt(len - 4) != '.')) {
return null;
}
StringBuilder buffer = new StringBuilder();
int off = len - 3;
buffer.append(arcName, 0, off);
if (!isDigit(arcName.charAt(off + 1))
|| !isDigit(arcName.charAt(off + 2))) {
buffer.append("r00");
} else {
char[] ext = new char[3];
arcName.getChars(off, len, ext, 0);
int i = ext.length - 1;
while ((++ext[i]) == '9' + 1) {
ext[i] = '0';
i--;
}
buffer.append(ext);
}
return buffer.toString();
}
}
private static boolean isDigit(char c) {
return (c >= '0') && (c <= '9');
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy