zoukankan      html  css  js  c++  java
  • JavaFTP文件传输上传和下载文件

    首先在电脑上创建一个ftp服务器,具体步骤自行百度。

    接下来开始写有用的java连接TFP站点和传输文件的代码。

    1.首先jar用的是apache 的工具包 请自行下载 。

    2.俩个文件代码 一个FtpConfig.java 和 FtpUtil.java 实现了上传,文件夹下载,和单文件下载 详情如下均已测试。 
    FtpConfig.java

    **
     * 
     */
    package FTPDemo;
    
    /**
     * @date 2016年12月30日
     * @author xie
     * 
     */
    public class FtpConfig {
    
      // 主机ip
      private String FtpHost;
      // 端口号
      private Integer FtpPort;
      // ftp用户名
      private String FtpUser;
      // ftp密码
      private String FtpPassword;
      // ftp中的目录
      private String FtpPath;
    
      public String getFtpHost() {
        return FtpHost;
    
      }
    
      public Integer getFtpPort() {
        return FtpPort;
      }
    
      public void setFtpPort(Integer ftpPort) {
        FtpPort = ftpPort;
      }
    
      public void setFtpHost(String ftpHost) {
        FtpHost = ftpHost;
      }
    
      public String getFtpUser() {
        return FtpUser;
      }
    
      public void setFtpUser(String ftpUser) {
        FtpUser = ftpUser;
      }
    
      public String getFtpPassword() {
        return FtpPassword;
      }
    
      public void setFtpPassword(String ftpPassword) {
        FtpPassword = ftpPassword;
      }
    
      public String getFtpPath() {
        return FtpPath;
      }
    
      public void setFtpPath(String ftpPath) {
        FtpPath = ftpPath;
      }
    
    }

    FtpUtil.java

    package FTPDemo;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.util.logging.Logger;
    
    import org.apache.commons.net.ftp.FTPClient;
    import org.apache.commons.net.ftp.FTPFile;
    import org.apache.commons.net.ftp.FTPReply;
    
    public class FtpUtil { 
    
    private static FTPClient ftp;
    
    
    /**
     * 获取ftp连接
     * @param f
     * @return
     * @throws Exception
     */
    public static boolean connectFtp(FtpConfig f) throws Exception{
        ftp=new FTPClient();
        boolean flag=false;
        if (f.getFtpPort()==null) {
            ftp.connect(f.getFtpHost(),21);
        }else{
            ftp.connect(f.getFtpHost(),f.getFtpPort());
        }
        ftp.login(f.getFtpUser(), f.getFtpPassword());
        int reply = ftp.getReplyCode();      
        if (!FTPReply.isPositiveCompletion(reply)) {      
              ftp.disconnect();      
              return flag;      
        }      
        ftp.changeWorkingDirectory(f.getFtpPath());      
        flag = true;      
        return flag;
    }
    
    /**
     * 关闭ftp连接
     */
    public static void closeFtp(){
      try {
          if (ftp!=null && ftp.isConnected()) {
                ftp.logout();
                ftp.disconnect();
          }
      }catch (IOException e){
        e.printStackTrace();
      }   
    }
    
    /**
     * ftp上传文件
     * @param f
     * @throws Exception
     */
    public static void upload(File f) throws Exception{
        if (f.isDirectory()) {
            ftp.makeDirectory(f.getName());
            ftp.changeWorkingDirectory(f.getName());
            String[] files=f.list();
            for(String fstr : files){
                File file1=new File(f.getPath()+File.separator+fstr);
                if (file1.isDirectory()) {
                    upload(file1);
                    ftp.changeToParentDirectory();
                }else{
                    File file2=new File(f.getPath()+File.separator+fstr);
                    FileInputStream input=new FileInputStream(file2);
                    ftp.storeFile(file2.getName(),input);
                    input.close();
                }
            }
        }else{
            File file2=new File(f.getPath());
            FileInputStream input=new FileInputStream(file2);
            ftp.storeFile(file2.getName(),input);
            input.close();
        }
    }
    
    /**
     * 下载链接配置
     * @param f
     * @param localBaseDir 本地目录
     * @param remoteBaseDir 远程目录
     * @throws Exception
     */
    public static void startDownDir(FtpConfig f,String localBaseDir,String remoteBaseDir) throws Exception{
        if (FtpUtil.connectFtp(f)) {
            try { 
                FTPFile[] files = null; 
                boolean changedir = ftp.changeWorkingDirectory(remoteBaseDir); 
                if (changedir) { 
                    ftp.setControlEncoding("UTF-8"); 
                    files = ftp.listFiles(); 
                    for (int i = 0; i < files.length; i++) { 
                         downloadFile(files[i], localBaseDir, remoteBaseDir); 
                    } 
                }else{
                     System.out.println("不存在的相对路径!");
                } 
            } catch (Exception e) { 
              e.printStackTrace();
            } 
        }else{
           System.out.println("连接失败");
        }
    
    }
    
    public static void startDownFile(FtpConfig f,String localBaseDir,String remoteFilePath) throws Exception{
      if (FtpUtil.connectFtp(f)) {
        try { 
          FileOutputStream outputStream = new FileOutputStream(localBaseDir + remoteFilePath); 
          ftp.retrieveFile(remoteFilePath, outputStream);
          outputStream.flush();
          outputStream.close();
        } catch (Exception e) { 
          e.printStackTrace();
        } 
      }else{
        System.out.println("连接FTP服务器失败");
      }
    
    }
    
    
    /** 
     * 
     * 下载FTP文件 
     * 当你需要下载FTP文件的时候,调用此方法 
     * 根据<b>获取的文件名,本地地址,远程地址</b>进行下载 
     * 
     * @param ftpFile 
     * @param relativeLocalPath 下载到本地的绝对路径
     * @param relativeRemotePath 要下载的远程ftp服务器相对路径
     */ 
    private  static void downloadFile(FTPFile ftpFile, String relativeLocalPath,String relativeRemotePath) { 
        if (ftpFile.isFile()) {
            if (ftpFile.getName().indexOf("?") == -1) { 
                OutputStream outputStream = null; 
                try { 
                    File locaFile= new File(relativeLocalPath+ ftpFile.getName()); 
                    //判断文件是否存在,存在则返回  or 直接覆盖
                    if(locaFile.exists()){ 
                        return; 
                    }else{ 
                        outputStream = new FileOutputStream(relativeLocalPath+ ftpFile.getName()); 
                        ftp.retrieveFile(ftpFile.getName(), outputStream);
                        outputStream.flush(); 
                    } 
                } catch (Exception e) { 
                         e.printStackTrace();
                } finally { 
                    try { 
                        if (outputStream != null){ 
                            outputStream.close(); 
                        }
                    } catch (IOException e) { 
                       e.printStackTrace();
                    } 
                } 
            } 
        } else { 
            String newlocalRelatePath = relativeLocalPath + ftpFile.getName(); 
            String newRemote = relativeRemotePath + ftpFile.getName().toString(); 
            File fl = new File(newlocalRelatePath); 
            if (!fl.exists()) { 
                fl.mkdirs(); 
            } 
            try { 
                newlocalRelatePath = newlocalRelatePath+File.separator; 
                newRemote = newRemote+File.separator; 
                String currentWorkDir = ftpFile.getName().toString();
                //System.out.println(currentWorkDir);
                boolean changedir = ftp.changeWorkingDirectory(currentWorkDir); 
                if (changedir) { 
                    FTPFile[] files = null; 
                    files = ftp.listFiles(); 
                    for (int i = 0; i < files.length; i++) { 
                        downloadFile(files[i], newlocalRelatePath, newRemote); 
                    } 
                } 
                if (changedir){
                    ftp.changeToParentDirectory(); 
                } 
            } catch (Exception e) { 
                e.printStackTrace();
            } 
        } 
    } 
    
    
    public static void main(String[] args) throws Exception{  
            FtpConfig f=new FtpConfig();
            f.setFtpHost("172.25.69.14");
            f.setFtpPort(21);
            f.setFtpUser("anyone");
            f.setFtpPassword("");
            // f.setFtpPath("/data1/");//相对路径
            FtpUtil.connectFtp(f);
            File file = new File("E:\data1\physics.txt");
    
            //FtpUtil.upload(file);//把文件上传在ftp上
            // FtpUtil.startDownFile(f, "E:/",  "physics.txt");
            FtpUtil.startDownDir(f, "E:/data1/",  "/data1/");
    
       }  
    }
     
  • 相关阅读:
    668. Kth Smallest Number in Multiplication Table
    658. Find K Closest Elements
    483. Smallest Good Base
    475. Heaters
    454. 4Sum II
    441. Arranging Coins
    436. Find Right Interval
    410. Split Array Largest Sum
    392. Is Subsequence
    378. Kth Smallest Element in a Sorted Matrix
  • 原文地址:https://www.cnblogs.com/mlgm/p/7788739.html
Copyright © 2011-2022 走看看