Ashutosh
Ashutosh

Reputation: 25

Java Code to Zip/FTP Directory in a UNIX Server

I want to write a couple of methods in a Java package, which would be deployed in a UNIX Server. As of now, my code was for Windows Server, for which I used the following code to zip Directory.

public static final void zipDirectory(File fBatchDirectory, String batchName, String ondemandDocExtension) throws IOException 
{
    //Set zip file name
    File zip = new File(fBatchDirectory + "\\" + StringUtils.replace(batchName,".ind", "") + ".zip");                       

    //filter file
    FileFilter filter = new FileFilter(ondemandDocExtension);       
    File[] files = fBatchDirectory.listFiles(filter);

    if(files.length > 0)
    {           
        ZipOutputStream zos = new ZipOutputStream( new FileOutputStream(zip) );
        zip(files, fBatchDirectory, zos , ondemandDocExtension);
        zos.close();
    }         

}

private static final void zip(File[] files, File base,ZipOutputStream zos , String docExtension) throws IOException 
{                   
        byte[] buffer = new byte[8192];
        int read = 0;
        for (int i = 0, n = files.length; i < n; i++) 
        {
           //Add to zip only if its file
          if (files[i].isFile())
          {
            FileInputStream in = new FileInputStream(files[i]);
            ZipEntry entry = new ZipEntry(files[i].getPath().substring(base.getPath().length() + 1));
            zos.putNextEntry(entry);

            while (-1 != (read = in.read(buffer))) 
            {
              zos.write(buffer, 0, read);
            }
            in.close();
          }
        }
}

I am confused as to how to replicate the same functionality to zip Directory in Java, for UNIX? And then I want to FTP the files from a UNIX Serve to another UNIX Server.

Any pointers would be greatly appreciated.

Upvotes: 0

Views: 1053

Answers (1)

Alonso Dominguez
Alonso Dominguez

Reputation: 7858

At a first glance, the only problem I see is at this line:

File zip = new File(fBatchDirectory + "\\" + StringUtils.replace(batchName,".ind", "") + ".zip");

Because you are explicitly using the double backslash (\\) in your filename. If you change that for File.separator your code should work for both operating systems:

File zip = new File(fBatchDirectory + File.separator + StringUtils.replace(batchName,".ind", "") + ".zip");

For the FTP part of it, you can get down and dirty and use an FTP client or use a more high level library like Apache Commons VFS which, by the way, inspired the new IO FileSystem API in Java 7, but I don't now about any library implementing the FTP protocol with the new API at the moment.

Upvotes: 2

Related Questions