天天看點

ftp上傳下載下傳檔案、解壓方法



import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.SocketException;

import java.util.ArrayList;

import java.util.Enumeration;

import java.util.List;

import java.util.Map;

import java.util.Properties;

import org.apache.tools.zip.ZipEntry;

import org.apache.tools.zip.ZipFile;

import org.apache.commons.net.ftp.FTP;

import org.apache.commons.net.ftp.FTPClient;

import org.apache.commons.net.ftp.FTPFile;

import org.apache.commons.net.ftp.FTPReply;

//連接配接ftp

 private  boolean connect(String addr,int port,String username,String password) throws Exception

 {       

  boolean result = false;       

  ftpClient = new FTPClient();       

  int reply;       

  ftpClient.connect(addr,port);       

  ftpClient.login(username,password);       

  ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);       

  reply = ftpClient.getReplyCode();       

  if (!FTPReply.isPositiveCompletion(reply))

  {       

   ftpClient.disconnect();       

   return result;       

  }       

  result = true;       

  return result;       

 }

 // 檔案上傳

 @SuppressWarnings("unchecked")

 public boolean uploadFile(String localPath,String fileName) {

  try {

    try {

     connect(address, port, username, password);

    } catch (Exception e) {

     throw new UniEAPBusinessException("FTP連接配接失敗");

    }

    System.out.println("本地路徑路徑:" + localPath);

    System.out.println("FTP路徑:" + fileName);

          ftpClient.changeWorkingDirectory(fileName);

          ftpClient.setFileType( FTP.BINARY_FILE_TYPE);

             if("ActiveMode".equals(this.mTransMode)){

              ftpClient.enterLocalActiveMode();

             }else{

              ftpClient.enterLocalPassiveMode();

             }

             System.out.println("本地檔案路徑"+localPath);

             //String fileName = remotePath.substring(remotePath.lastIndexOf("/") + 1);  //FTP伺服器顯示的檔案名

             FileInputStream fis = new FileInputStream(localPath);  //打開檔案

             if(!ftpClient.storeFile(fileName, fis))  //FTP上傳檔案

             {

              this.mErrorsList.add(String.valueOf(ftpClient.getReplyCode()));

                 fis.close();

                 return false;

             }

             fis.close();

   }

            catch(SocketException ex)

            {

                ex.printStackTrace();           

                return false;

            }

            catch(IOException ex)

            {

                ex.printStackTrace();

                return false;

            }

            return true;

 }

    public String[] downloadOneDirectory(String cDirectory,

                            String cLocalDirectory) throws IOException

    {

        changeWorkingDirectory(cDirectory);

        this.enterLocalPassiveMode();

        FTPFile[] files = listFiles();

        String[] fileName = new String[files.length];

        for(int i = 0; i < files.length; i++)

        {

            if(files[i].isDirectory())

            {

                    continue;

            }

            if(!downloadFile(cDirectory, cLocalDirectory, files[i].getName()))

            {

                return null;

            }

            fileName[i] = files[i].getName();

        }

        return fileName;

    }

    public boolean downloadFile(String cDirectory,

                            String cLocalDirectory,

                            String cFileName)

    {

        System.out.print(cFileName);

        try

        {

            changeWorkingDirectory(cDirectory);

            File file = new File(cLocalDirectory + File.separator + cFileName);

            FileOutputStream fos = new FileOutputStream(file);

            retrieveFile(cFileName, fos);

            fos.close();

        }

        catch(IOException ex)

        {

            ex.printStackTrace();

            mErrorsList.add(String.valueOf(mF

public boolean downloadFile(String cDirectory,

String cLocalDirectory,

String cFileName)

{

System.out.print(cFileName);

try

{

changeWorkingDirectory(cDirectory);

File file = new File(cLocalDirectory + File.separator + cFileName);

FileOutputStream fos = new FileOutputStream(file);

retrieveFile(cFileName, fos);

fos.close();

}

catch(IOException ex)

{

ex.printStackTrace();

mErrorsList.add(String.valueOf(mFTPReplyCodeName.MCODE_601));

System.out.println(": Fail");

return false;

}

System.out.println(": Succ");

return true;

}TPReplyCodeName.MCODE_601));

            System.out.println(": Fail");

            return false;

        }

        System.out.println(": Succ");

        return true;

    }

    @SuppressWarnings({"unchecked"}) 

    public String unZipFiles(File zipFile, String descDir) throws IOException { 

          String fileName = "";

        ZipFile zip = new ZipFile(zipFile,"GBK");//解決中文檔案夾亂碼 

      //  String name = zip.getName().substring(zip.getName().lastIndexOf('\\')+1, zip.getName().lastIndexOf('.')); 

        File pathFile = new File(descDir); 

        if (!pathFile.exists()) { 

            pathFile.mkdirs(); 

        } 

        for (Enumeration<? extends ZipEntry> entries = zip.getEntries(); entries.hasMoreElements();) { 

            ZipEntry entry = (ZipEntry) entries.nextElement(); 

            String zipEntryName = entry.getName(); 

            fileName = zipEntryName;

            InputStream in = zip.getInputStream(entry); 

            String outPath = (descDir +"/"+ zipEntryName).replaceAll("\\*", "/"); 

            // 判斷路徑是否存在,不存在則建立檔案路徑 

            File file = new File(outPath.substring(0, outPath.lastIndexOf('/'))); 

            if (!file.exists()) { 

                file.mkdirs(); 

            } 

            // 判斷檔案全路徑是否為檔案夾,如果是上面已經上傳,不需要解壓 

            if (new File(outPath).isDirectory()) { 

                continue; 

            } 

            // 輸出檔案路徑資訊 

//           System.out.println(outPath); 

            FileOutputStream out = new FileOutputStream(outPath); 

            byte[] buf1 = new byte[1024]; 

            int len; 

            while ((len = in.read(buf1)) > 0) { 

                out.write(buf1, 0, len); 

            } 

            in.close(); 

            out.close(); 

        } 

        System.out.println("******************解壓完畢********************"); 

        return fileName; 

    }