Java tutorial
/* * Copyright (c) 2014. * * BaasBox - info-at-baasbox.com * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.baasbox.db.async; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; import org.apache.commons.io.FileUtils; import org.apache.commons.lang.exception.ExceptionUtils; import com.baasbox.BBConfiguration; import com.baasbox.BBInternalConstants; import com.baasbox.db.DbHelper; import com.baasbox.service.logging.BaasBoxLogger; public class ExportJob implements Runnable { private String fileName; private String appcode; public ExportJob(String fileName, String appcode) { this.fileName = fileName; this.appcode = appcode; } @Override public void run() { FileOutputStream dest = null; ZipOutputStream zip = null; FileOutputStream tempJsonOS = null; FileInputStream in = null; try { //File f = new File(this.fileName); File f = File.createTempFile("export", ".temp"); dest = new FileOutputStream(f); zip = new ZipOutputStream(dest); File tmpJson = File.createTempFile("export", ".json"); tempJsonOS = new FileOutputStream(tmpJson); DbHelper.exportData(this.appcode, tempJsonOS); BaasBoxLogger.info(String.format("Writing %d bytes ", tmpJson.length())); tempJsonOS.close(); ZipEntry entry = new ZipEntry("export.json"); zip.putNextEntry(entry); in = new FileInputStream(tmpJson); final int BUFFER = BBConfiguration.getImportExportBufferSize(); byte buffer[] = new byte[BUFFER]; int length; while ((length = in.read(buffer)) > 0) { zip.write(buffer, 0, length); } zip.closeEntry(); in.close(); File manifest = File.createTempFile("manifest", ".txt"); FileUtils.writeStringToFile(manifest, BBInternalConstants.IMPORT_MANIFEST_VERSION_PREFIX + BBConfiguration.getApiVersion()); ZipEntry entryManifest = new ZipEntry("manifest.txt"); zip.putNextEntry(entryManifest); zip.write(FileUtils.readFileToByteArray(manifest)); zip.closeEntry(); tmpJson.delete(); manifest.delete(); File finaldestination = new File(this.fileName); FileUtils.moveFile(f, finaldestination); } catch (Exception e) { BaasBoxLogger.error(ExceptionUtils.getMessage(e)); } finally { try { if (zip != null) zip.close(); if (dest != null) dest.close(); if (tempJsonOS != null) tempJsonOS.close(); if (in != null) in.close(); } catch (Exception ioe) { BaasBoxLogger.error(ExceptionUtils.getMessage(ioe)); } } } }