Java tutorial
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ //package com.power.utils; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.LinkedList; import java.util.Scanner; /** * * @author f6036477 */ public class FileSplitter { private File f; public FileSplitter(File f) { if (f == null) throw new IllegalArgumentException("File must be not null!"); this.f = f; System.out.println("File Length (KB): " + f.length() / 1024.0); } public boolean split(long size) { if (size <= 0) return false; try { int parts = ((int) (f.length() / size)); long flength = 0; if (f.length() % size > 0) parts++; File[] fparts = new File[parts]; FileInputStream fis = new FileInputStream(f); FileOutputStream fos = null; for (int i = 0; i < fparts.length; i++) { fparts[i] = new File(f.getPath() + ".part." + i); fos = new FileOutputStream(fparts[i]); int read = 0; long total = 0; byte[] buff = new byte[1024]; int origbuff = buff.length; while (total < size) { read = fis.read(buff); if (read != -1) { buff = FileEncoder.invertBuffer(buff, 0, read); total += read; flength += read; fos.write(buff, 0, read); } if (i == fparts.length - 1 && read < origbuff) break; } fos.flush(); fos.close(); fos = null; } fis.close(); // f.delete(); f = fparts[0]; System.out.println("Length Readed (KB): " + flength / 1024.0); return true; } catch (Exception ex) { System.out.println(ex); System.out.println(ex.getLocalizedMessage()); System.out.println(ex.getStackTrace()[0].getLineNumber()); ex.printStackTrace(); return false; } } public boolean split(int parts) { if (parts <= 0) return false; return this.split(f.length() / parts); } public boolean unsplit() { try { LinkedList<File> list = new LinkedList<File>(); boolean exists = true; File temp = null; File dest = new File(f.getPath().substring(0, f.getPath().lastIndexOf(".part"))); FileInputStream fis = null; FileOutputStream fos = new FileOutputStream(dest); int part = 0; long flength = 0; String name = null; while (exists) { name = f.getPath(); name = name.substring(0, name.lastIndexOf(".") + 1) + part; temp = new File(name); exists = temp.exists(); if (!exists) break; fis = new FileInputStream(temp); byte[] buff = new byte[1024]; int read = 0; while ((read = fis.read(buff)) > 0) { buff = FileEncoder.invertBuffer(buff, 0, read); fos.write(buff, 0, read); if (read > 0) flength += read; } fis.close(); fis = null; temp.delete(); part++; } fos.flush(); fos.close(); f = dest; System.out.println("Length Writed: " + flength / 1024.0); return true; } catch (Exception ex) { ex.printStackTrace(); return false; } } public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.print("Split? [true/false]: "); boolean split = Boolean.parseBoolean(scan.next()); if (split) { File file = new File("T:/Java/com/power/nb/visual/dist/visual.zip"); FileSplitter splitter = new FileSplitter(file); System.out.println("splitter.split(3): " + splitter.split(3)); } else { File file = new File("T:/Java/com/power/nb/visual/dist/visual.zip.part.0"); FileSplitter splitter = new FileSplitter(file); System.out.println("splitter.unsplit(): " + splitter.unsplit()); } } } class FileEncoder { private File f; public FileEncoder(File f) { if (f == null) throw new IllegalArgumentException("File must be not null!"); this.f = f; } public boolean encode() { try { File temp = new File(f.getPath() + ".tmp"); FileInputStream fis = new FileInputStream(f); FileOutputStream fos = new FileOutputStream(temp); byte[] buff = new byte[1024]; int read = 0; while ((read = fis.read(buff)) > 0) { buff = FileEncoder.invertBuffer(buff, 0, read); fos.write(buff, 0, read); } fis.close(); fos.flush(); fos.close(); f.delete(); temp.renameTo(f); f = temp; return true; } catch (Exception ex) { ex.printStackTrace(); return false; } } public static byte[] invertBuffer(byte[] buff, int offset, int length) { if (buff == null || buff.length == 0) return null; if (offset < 0 || length < 0) return null; byte[] inverted = new byte[length]; int ind = length - 1; for (int i = offset; i < length; i++) { inverted[ind] = buff[i]; ind--; } return inverted; } public boolean decode() { return this.encode(); } public static void main(String[] args) { File file = new File("T:/Java/com/power/nb/visual/dist/visual.zip"); FileEncoder enc = new FileEncoder(file); System.out.println("enc.decode(): " + enc.decode()); } }