I'm writing a code to split a file into many files with a size specified in the code, and then it will join these parts later. The problem is with the joining code, it doesn't work and I can't figure what is wrong! This is my code: 
import java.io.*;
 import java.util.*;
  public class StupidSplit {
  static final int Chunk_Size = 10;
  static int size =0;
   public static void main(String[] args) throws IOException {
    String file = "b.txt";
    int chunks = DivideFile(file);
    System.out.print((new File(file)).delete());
    System.out.print(JoinFile(file, chunks));
   }
     static  boolean JoinFile(String fname, int nChunks) {
    /*
     * Joins the chunks together. Chunks have been divided using DivideFile
     * function so the last part of filename will ".partxxxx" Checks if all
     * parts are together by matching number of chunks found against
     * "nChunks", then joins the file otherwise throws an error.
     */
    boolean successful = false;
          File currentDirectory = new File(System.getProperty("user.dir")); // 
    File[] fileList = currentDirectory.listFiles();
    /* populate only the files having extension like "partxxxx" */
    List<File> lst = new ArrayList<File>();
         //  
           Arrays.sort(fileList);
    for (File file : fileList) {
        if (file.isFile()) {
            String fnm = file.getName();
            int lastDot = fnm.lastIndexOf('.');
             // add to list which match the name given by "fname" and have
             //"partxxxx" as extension"
            if (fnm.substring(0, lastDot).equalsIgnoreCase(fname)
                    && (fnm.substring(lastDot + 1)).substring(0, 4).equals("part")) {
                lst.add(file);
            }
        }
    }
    /*
     * sort the list - it will be sorted by extension only because we have
     * ensured that list only contains those files that have "fname" and
     * "part"
     */
    File[] files = (File[]) lst.toArray(new File[0]);
    Arrays.sort(files);
    System.out.println("size ="+files.length);
    System.out.println("hello");
      /* Ensure that number of chunks match the length of array */
      if (files.length == nChunks-1) {
        File ofile = new File(fname);
        FileOutputStream fos;
        FileInputStream fis;
        byte[] fileBytes;
        int bytesRead = 0;
        try {
            fos = new FileOutputStream(ofile,true);
            for (File file : files) {
                fis = new FileInputStream(file);
                fileBytes = new byte[(int) file.length()];
                bytesRead = fis.read(fileBytes, 0, (int) file.length());
                assert(bytesRead == fileBytes.length);
                assert(bytesRead == (int) file.length());
                fos.write(fileBytes);
                fos.flush();
                fileBytes = null;
                fis.close();
                fis = null;
            }
            fos.close();
            fos = null;
        } catch (FileNotFoundException fnfe) {
            System.out.println("Could not find file");
            successful = false;
            return successful;
        } catch (IOException ioe) {
            System.out.println("Cannot write to disk");
            successful = false;
            return successful;
        }
        /* ensure size of file matches the size given by server */
        successful = (ofile.length() == StupidSplit.size) ? true : false;
    }
                    else {
        successful = false;
    }
    return successful;
  }
  static int DivideFile(String fname) {
    File ifile = new File(fname); 
    FileInputStream fis;
    String newName;
    FileOutputStream chunk;
    //int fileSize = (int) ifile.length();
            double fileSize = (double) ifile.length();
    //int nChunks = 0, read = 0, readLength = Chunk_Size;
            int nChunks = 0, read = 0, readLength = Chunk_Size;
    byte[] byteChunk;
    try {
        fis = new FileInputStream(ifile);
        StupidSplit.size = (int)ifile.length();
        while (fileSize > 0) {
            if (fileSize <= Chunk_Size) {
                readLength =  (int) fileSize;
            }
            byteChunk = new byte[readLength];
            read = fis.read(byteChunk, 0, readLength);
            fileSize -= read;
            assert(read==byteChunk.length);
            nChunks++;
            //newName = fname + ".part" + Integer.toString(nChunks - 1);
                            newName = String.format("%s.part%09d", fname, nChunks - 1);
            chunk = new FileOutputStream(new File(newName));
            chunk.write(byteChunk);
            chunk.flush();
            chunk.close();
            byteChunk = null;
            chunk = null;
        }
        fis.close(); 
                    System.out.println(nChunks);
    //  fis = null;
    } catch (FileNotFoundException fnfe) {
        System.out.println("Could not find the given file");
        System.exit(-1);
    } catch (IOException ioe) {
        System.out
                .println("Error while creating file chunks. Exiting program");
        System.exit(-1);
    }System.out.println(nChunks);  
    return nChunks;
}   
}
    }