0

我想在 Java 包中编写几个方法,这些方法将部署在 UNIX 服务器中。到目前为止,我的代码是针对 Windows Server 的,为此我使用以下代码压缩目录。

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

对于如何将相同的功能复制到 Java 中的 zip 目录,对于 UNIX,我感到很困惑?然后我想将文件从 UNIX 服务器 FTP 到另一个 UNIX 服务器。

任何指针将不胜感激。

4

1 回答 1

2

乍一看,我看到的唯一问题是在这一行:

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

因为您在文件名中明确使用了双反斜杠 ( \\)。如果您更改File.separator您的代码应该适用于两个操作系统:

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

对于其中的 FTP 部分,您可以使用FTP 客户端或使用更高级的库(如Apache Commons VFS),顺便说一下,它启发了 Java 7 中的新 IO FileSystem API,但我没有现在关于目前使用新 API 实现 FTP 协议的任何库。

于 2013-02-14T10:47:00.237 回答