`
5211422
  • 浏览: 212317 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ftp方式上传、下载文件

    博客分类:
  • java
阅读更多

//附件是需要的jar包

 

package com.cbf.util.ftp;

 

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

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

/**
 * org.apache.commons.net.ftp.FTPClient;
 * @return FTPClient
 * @author ryan
 * @since Oct 14, 2009
 *
 */
public class FtpOperation {

 private String ftpIP = "10.1.0.9";

 private String loginName = "jishu";

 private String password = "123456";

 // String remoteDir = "/cc";
 private String ftpPort = "21";

 private FTPClient ftp = new FTPClient();

 private Map<String, String> map = new HashMap<String, String>();

 /**
  *
  * @param ftpIP      FTP服务器ip
  * @param ftpPort    FTP服务器端口
  * @param loginName  FTP服务器登录名
  * @param password   FTP服务器登录密码
  */
 public FtpOperation(String ftpIP, String ftpPort, String loginName,
   String password) {
  this.ftpIP = ftpIP;
  this.ftpPort = ftpPort;
  this.loginName = loginName;
  this.password = password;

  getFtpConnection();
 }

 /**
  *
  * @return FTPClient
  */
 public FTPClient getFtpConnection() {

  try {
   // connection
   ftp.connect(ftpIP, Integer.parseInt(ftpPort));
   int reply = ftp.getReplyCode();
   if (FTPReply.isPositiveCompletion(reply)) {
    // login
    if (ftp.login(loginName, password)) {
     ftp.setControlEncoding("GBK");
     ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
     return ftp;
    } else {
     map.put("msg", "用户名或密码错误");
     ftp.logout();
    }
   } else {
    map.put("msg", "ip或端口错误");
    ftp.disconnect();
   }

  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   if (ftp.isConnected()) {
    try {
     ftp.disconnect();
    } catch (IOException f) {
     // TODO Auto-generated catch block
     f.printStackTrace();
    }
   }
  }
  return null;
 }

 public void closeFtpConnection() {
  if (ftp.isConnected()) {
   try {
    ftp.disconnect();
   } catch (IOException f) {
   }
  }
 }

 /**
  *
  * @param localFilePath
  *            本地文件的绝对路径
  * @param serverFilePath
  *            上传到ftp上的相对路径相 相对于ftp默认路径 如:"/aa/bb/cc/11.xml"
  * @return String
  */
 public boolean uploadFile(String localFilePath, String serverFilePath) {

  InputStream input = null;
  try {
   input = new FileInputStream(localFilePath);

   if (input == null) {
    map.put("msg", "本地文件不存在");
   }

   int n = serverFilePath.lastIndexOf("/") + 1;
   String[] str = serverFilePath.substring(0, n).split("/");// 取文件夹路径
   ftp.setControlEncoding("GBK");
   for (int i = 1; i < str.length; i++) {
    FTPFile[] files = ftp.listFiles();// 取ftp当前目录下的文件
    boolean inMark = true;
    for (int j = 1; j < files.length; j++) {
     if (files[j].getName().equals(str[i])) {// 判断是否有该文件夹,如果有返回false;
      System.out.println(files[j].getName() + "==" + str[i]);
      inMark = false;
     }
    }
    if (inMark) {
     System.out.println("建包" + str[i]);
     ftp.makeDirectory(new String(str[i].getBytes("GBK"),
       "iso-8859-1"));
    }
    System.out.println("进入" + str[i]);
    boolean b = ftp.changeWorkingDirectory(new String(str[i]
      .getBytes("GBK"), "iso-8859-1"));
   }
   return ftp.storeFile(serverFilePath.substring(n, serverFilePath
     .length()), input);// 上传文件

  } catch (FileNotFoundException e1) {
   // TODO Auto-generated catch block
   e1.printStackTrace();
   map.put("msg", "本地文件不存在");
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   map.put("msg", "异常");
  } finally {
   try {
    input.close();
    ftp.logout();
    if (ftp.isConnected()) {
     try {
      ftp.disconnect();
     } catch (IOException f) {
     }
    }
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
  return false;
 }

 /**
  * downloadType
  *
  * @param downloadType
  *            为0是下载单个文件;downloadType1时为下载文件夹下的文件
  * @param localFilePath
  *            下载到本地的绝对路径
  * @param serverFilePath
  *            ftp服务器上的相对路径相;相对于ftp默认路径 如:"aa/aa/bb"
  * @return
  */
 public boolean downloadFile(int downloadType, String localFilePath,
   String serverFilePath) {

  boolean reMark = true;
  OutputStream outStream = null;
  try {
   String localFileEncoding = new String(
     localFilePath.getBytes("GBK"), "iso-8859-1");

   String serverPathEncoding = new String(serverFilePath
     .getBytes("GBK"), "iso-8859-1");

   if (downloadType == 0) {// 下载单个文件
    FTPFile[] files = ftp.listFiles(serverPathEncoding);
    if (files.length != 1) {
     map.put("msg", "没有" + serverPathEncoding + "这个文件");
     return false;
    }
    outStream = new FileOutputStream(localFileEncoding
      + files[0].getName());
    reMark = ftp.retrieveFile(serverPathEncoding, outStream);

   } else if (downloadType == 1) {// 下载文件夹下的所有文件,不包含文件夹
    String[] s = serverFilePath.split("/");

    for (int i = 1; i < s.length; i++) {
     ftp.changeWorkingDirectory(s[i]);
    }

    String[] files2 = ftp.listNames(serverPathEncoding);

    if (files2 == null) {
     map.put("msg", serverPathEncoding + "没有这个路径下没有文件");
     return false;
    }
    for (int i = 0; i < files2.length; i++) {
     File f = new File(localFilePath + "/" + files2[i]);
     outStream = new FileOutputStream(f);
     String name = new String(files2[i].getBytes("GBK"),
       "iso-8859-1");
     // 任意文件下载失败则返回失败
     if (!ftp.retrieveFile(serverPathEncoding + "/" + name,
       outStream)) {
      map.put("msg" + i, name + "---下载失败!");
      reMark = false;
     }
    }
   }
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   map.put("msg", "异常");
   reMark = false;
  } finally {
   try {
    outStream.close();
    ftp.logout();
    if (ftp.isConnected()) {
     try {
      ftp.disconnect();
     } catch (IOException f) {
      reMark = false;
     }
    }
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    reMark = false;
   }
  }
  return reMark;
 }

 /**
  * 取某路径下的文件,不包含子文件夹里的文件
  * @param path
  *            ftp服务器上的相对路径相;相对于ftp默认路径 如:"aa/aa/bb"
  */
 public ArrayList<String> getFileList(String path) {
  ArrayList<String> list = new ArrayList<String>();
  try {
   String serverPathEncoding = new String(path.getBytes("GBK"),
     "iso-8859-1");
   //String[] files = ftp.listNames(serverPathEncoding);//文件个数
   FTPFile[] files = ftp.listFiles(serverPathEncoding);//所有东西
   if (files == null) {
    map.put("msg", path+"这个路径下是空的");
   } else {
    for (FTPFile ss : files) {
     //System.out.println(ss.getName());
     list.add(ss.getName());
    }
   }
  } catch (Exception e) {
   map.put("msg", "异常");
  }
  return list;
 }

 public static void main(String args[]) throws Exception {

  FtpOperation ftpup = new FtpOperation("10.1.0.9", "21", "jishu",
    "123456");
  // ftpup.UploadFile("f:/aa.xml", "/的是/dd/56.xml");
  // ftpup.getFtpConnection();
  // boolean b = ftpup.uploadFile("h:/eeasas说不定.txt",
  // "sd/sdsd33.pdf/11.txt");
  // boolean b = ftpup.downloadFile(0, "h:/", "的是/eeasas说不定.txt");
  // System.out.println(b);
  //ftpup.getFileList("的是/dd/");
 }
}

1
0
分享到:
评论

相关推荐

    C# FTP上传下载文件

    FTP上传下载文件

    Android使用ftp方式实现文件上传和下载

    Android 使用 FTP 方式实现文件上传和下载 Android 使用 FTP 方式实现文件上传和下载是移动应用开发中的一项重要功能,特别是在 OTA 在线升级项目中,文件上传和下载是一个关键步骤。下面就 Android 使用 FTP 方式...

    FTP远程上传下载文件

    5. **FTP文件下载**: 下载文件时,设置`FtpWebRequest`的方法为`WebRequestMethods.Ftp.DownloadFile`。获取响应后,通过`GetResponseStream`读取数据并保存到本地文件。为了显示下载进度,可以使用`Stream`的`...

    ftp定时上传下载文件

    通过FTP,用户可以将文件从一台计算机(客户端)上传到另一台计算机(服务器),或者从服务器下载文件到客户端。在某些业务场景中,自动化的FTP定时上传和下载文件功能显得尤为重要,例如备份、同步数据或发布更新等...

    java+jsp代码实现从FTP服务器上传下载文件

    首先,在前端页面中提供了多种方式供用户选择进行文件下载操作;其次,在后端Java代码中则实现了与FTP服务器的交互,包括登录、文件传输等关键步骤。这种组合方式不仅能够满足基本的功能需求,还能确保操作的安全性...

    Ftp 文件上传下载 源代码

    这个源代码提供了对FTP协议的基本支持,包括连接到FTP服务器、文件上传、文件下载以及可能的目录浏览和管理功能。 FTP是一种标准网络协议,用于在Internet上进行文件传输。它允许用户从远程主机上传或下载文件,是...

    Java实现FTP文件上传和下载

    6. **文件下载**:使用`retrieveFile()`方法下载文件。这将返回一个OutputStream,你可以将其连接到本地文件或处理数据流。 ```java OutputStream out = new FileOutputStream("C:\\local\\downloaded_file.txt"); ...

    springboot 管理ftp文件系统,上传,下载,ftp

    7. **文件下载** 下载文件则通过调用`get`或`retrieve`方法实现,指定远程文件路径和本地保存位置。`retrieve`方法会返回一个`InputStreamResource`,可以直接写入文件。 8. **处理目录** `FtpTemplate`也支持...

    C#WinForm做FTP上传下载获取文件列表齐全

    根据给定的文件信息,我们可以总结出以下关于使用C# WinForm进行FTP上传、下载以及获取文件列表的关键知识点: ### C# WinForm与FTP交互基础知识 在C#中,使用WinForm开发图形用户界面(GUI)应用时,可以通过.NET...

    winform实现FTP上传、下载、删除文件

    **FTP上传文件:** 要实现FTP文件上传,我们首先创建一个`FtpWebRequest`对象,设置其方法为`WebMethod.UploadFile`,然后提供FTP服务器的URL、用户名和密码。接着,打开一个流写入器,将本地文件内容写入请求的主体...

    Java实现FTP批量大文件上传下载

    Java 实现 FTP 批量大文件上传下载 本文介绍了如何使用 Java 实现 FTP 服务器上的大批量文件的上传和下载,处理大文件的上传和下载。通过 Java 现有的可用的库来编写 FTP 客户端代码,并开发成 Applet 控件,做成...

    FTP文件上传和下载管理类(C++)

    4. **文件下载**:`download(const std::string& remotePath, const std::string& localPath)`方法将服务器上的`remotePath`文件下载到本地的`localPath`。 5. **目录操作**:`changeDirectory(const std::string& ...

    用C#实现文件上传到FTP,从ftp下载,读取文件

    - 虽然C#本身不直接支持从FTP服务器读取文件内容,但可以结合上述下载步骤,先将文件下载到本地,然后读取本地文件内容。 例如,以下是一个简单的FTP文件上传示例: ```csharp using System; using System.IO; ...

    springboot以FTP方式上传文件到远程服务器

    FTP(File Transfer Protocol)是一种常用的文件传输协议,广泛应用于文件上传、下载和管理。Spring Boot 提供了强大的支持来实现文件上传,下面我们将一步步介绍如何使用 Spring Boot 实现 FTP 方式上传文件到远程...

    springboot以FTP方式上传文件到远程服务器的流程

    Spring Boot 中使用 FTP 上传文件到远程服务器的流程 在本文中,我们将介绍如何使用 Spring Boot 实现 FTP 上传文件到远程服务器的流程。这个流程包括如何使用 JWT 登录认证及鉴权的流程,以及如何使用 Spring ...

    Java上传下载ftp上的文件

    文件下载是上传的逆过程,我们需要指定远程文件路径,并将其内容保存到本地文件。以下是一个文件下载示例: ```java File downloadFile = new File("/path/to/download/file.txt"); OutputStream outputStream = ...

    Java FTP 指定下载文件和上传文件到指定的服务器目录

    4. **下载文件**:调用`retrieveFile`方法完成文件下载操作。 #### 四、注意事项 1. **权限问题**:确保登录的FTP账户具有相应的读写权限。 2. **异常处理**:在实际开发中,应更加细致地处理异常情况,比如重试...

    FTP上传和下载,可以通过本地和服务器之间建立间接,通过FTP方式进行文件操作等

    FTP上传和下载,可以通过本地和服务器之间建立间接,通过FTP方式进行文件操作等

    完整实现ftp上传与下载并解析csv文件

    FTP上传涉及到`storeFile()`方法,而下载则使用`retrieveFile()`。 2. CSV文件解析: CSV(Comma Separated Values)文件是一种常见的数据交换格式,通常用于导入和导出表格数据。Java中,可以使用OpenCSV或者...

    利用ftp协议进行文件的上传下载

    5. FTP上传下载示例: - 上传文件: ```java FileInputStream fis = new FileInputStream(localFilePath); ftpClient.storeFile(remoteFilePath, fis); fis.close(); ``` - 下载文件: ```java ...

Global site tag (gtag.js) - Google Analytics