Mega Code Archive

 
Categories / Java / File Input Output
 

File Splitter

/*  * 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());   } }