ファイルをバックアップ・復元するために、複数のファイルを圧縮・解凍する機能が必要です。
便利なオープンソースがあるので、そちらを活用します。
簡単な使い方はこのような感じです。
public class ZipUtils {
Context mContext;
public ZipUtils( Context ctx ) {
mContext = ctx;
}
/**
* ファイルとフォルダを圧縮する
* @param 圧縮するFile
* @param zipName 生成されるzipファイルのパス
* */
public void compressFiles( final String szLocation,
final File[] files, final String zipFilePath )
{
File zipFile = new File(zipFilePath);
String strTempFile = zipFile.getParent() + "/temp.zip";
try{
ZipEntrySource[] entries = new ZipEntrySource[files.length];
int cnt = 0;
for( File file : files ){
entries[cnt] = new FileSource( szLocation + file.getName(), file );
cnt++;
}
if( zipFile.exists() ){
File tempFile = new File(strTempFile);
ZipUtil.addEntries(zipFile, entries, tempFile ); // Zipファイルが存在しないとエラーになる
// 元のファイルを削除
zipFile.delete();
// strTempFileをリネーム
tempFile.renameTo( zipFile );
}else {
ZipUtil.pack( entries, zipFile);
}
}catch(ZipException e) {
e.printStackTrace();
}
}
//--------------------------------------------------------
// zipFilePath: 解凍するファイル
//--------------------------------------------------------
public void decompressFile( String zipFilePath, final String strMapper, String outputDir ){
ZipUtil.unpack(new File(zipFilePath), new File(outputDir), new NameMapper() {
public String map(String name) {
if( name.startsWith(strMapper) ){
String strFile = name.substring(strMapper.length(),name.length());
return strFile;
}else return null;
}
});
}
}Gradleのほうには、下記の記述の追加が必要です。
dependencies {
implementation 'org.zeroturnaround:zt-zip:1.12'
}