org.apache.commons.net.ftp.*中的FTPClient类实现的FTP上传下载功能:
需导入Apache的commos-net的jar包,若导入的是1.4版本的包,则FTPFile[] fileList = ftpClient.listFiles()的执行过程中可能会报错,此时更换导入2.0版本的jar包,问题即可解决。
代码如下:
- package com.java.ftp;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.OutputStream;
- import org.apache.commons.net.ftp.*;
- public class FtpUtil {
- private FTPClient ftpClient = new FTPClient();
- /**
- * 连接到FTP服务器
- *
- * @param host
- * FTP地址
- * @param port
- * 端口号
- * @param username
- * 用户名
- * @param password
- * 密码
- */
- public boolean ftpConnect(String host, int port, String username,
- String password) {
- try {
- ftpClient.connect(host, port);
- ftpClient.setControlEncoding("GBK");
- int reply = ftpClient.getReplyCode();
- if (FTPReply.isPositiveCompletion(reply)) {
- if (ftpClient.login(username, password)) {
- System.out.println("Successful login!");
- return true;
- } else {
- System.out.println("fail to login!");
- }
- }
- } catch (Exception e) {
- System.out.println("Failure connection!");
- e.printStackTrace();
- }
- return false;
- }
- //从本地上传单个文件,localName:本地文件路径包含文件名,ftpFile:所要放于ftp的文件夹,newName:重命名
- public void ftpUpload(String localName, String ftpFile, String newName) {
- File srcFile = new File(localName);
- FileInputStream fis = null;
- try {
- fis = new FileInputStream(srcFile);
- //改变工作目录到所需要的路径下
- ftpClient.changeWorkingDirectory(ftpFile);
- ftpClient.setBufferSize(1024);
- ftpClient.setControlEncoding("GBK");
- ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
- ftpClient.storeFile(newName, fis);
- } catch (Exception e) {
- System.out.println("Failed to upload!");
- e.printStackTrace();
- } finally {
- try {
- fis.close();
- ftpDisConnect();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- //从本地上传一个文件夹,localPath:本地文件夹,ftpPath:上传的资源所要存放的文件夹
- public void ftpUpload2(String localPath, String ftpPath) {
- File uploadFile = new File(localPath);
- File[] fileList = uploadFile.listFiles();
- FileInputStream fis = null;
- if (fileList == null) {
- return;
- }
- for (int i = 0; i < fileList.length; i++) {
- try {
- fis = new FileInputStream(fileList[i]);
- String ftpFileName = fileList[i].getName();
- ftpClient.changeWorkingDirectory(ftpPath);
- ftpClient.setBufferSize(1024);
- ftpClient.setControlEncoding("GBK");
- ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
- ftpClient.storeFile(ftpFileName, fis);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- try {
- fis.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- ftpDisConnect();
- }
- //从FTP下载单个文件
- public void ftpDownload(String ftpFile, String localName) {
- File outfile = new File(localName + "/" + ftpFile);
- OutputStream fos = null;
- try {
- fos = new FileOutputStream(outfile);
- ftpClient.setBufferSize(1024);
- ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
- ftpClient.retrieveFile(ftpFile, fos);
- } catch (Exception e) {
- System.out.println("Failed to upload!");
- e.printStackTrace();
- } finally {
- try {
- fos.close();
- ftpClient.disconnect();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- ftpDisConnect();
- }
- }
- //从FTP下载一个文件夹
- public void ftpDownload2(String ftpPath, String localPath) {
- OutputStream fos = null;
- File localFile = null;
- try {
- ftpClient.changeWorkingDirectory(ftpPath);
- FTPFile[] fileList = ftpClient.listFiles();
- for (int i = 0; i < fileList.length; i++) {
- String localname = fileList[i].getName();
- localFile = new File(localPath + "/" + localname);
- fos = new FileOutputStream(localFile);
- ftpClient.setBufferSize(1024);
- ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- try {
- fos.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- ftpDisConnect();
- }
- public void ftpDisConnect() {
- try {
- if (ftpClient.isConnected()) {
- ftpClient.disconnect();
- }
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- //测试
- public static void main(String[] args) {
- FtpUtil ftp = new FtpUtil();
- ftp.ftpConnect("172.20.65.30", 21, "z", "zzz");
- //下载单个文件
- ftp.ftpUpload("D://1.jpg", "/s", "6.jpg");
- //下载文件夹
- ftp.ftpUpload2("D://桌面", "/s");
- //上传单个文件
- ftp.ftpDownload("/s/2.jpg", "e:/");
- //上传文件夹
- ftp.ftpDownload2("/s","e://s");
- }
- }