FileSplitter.java Source code

Java tutorial

Introduction

Here is the source code for FileSplitter.java

Source

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

}