Java中向ftp上传、下载文件

最近的一个项目跟ftp打交道很多,经常需要向ftp上传、下载文件,现在总结一下公共方法。

上传

/**
     * 文件上传
     *
     * @param ip
     *            host
     * @param port
     *            端口
     * @param userName
     *            用户名
     * @param passWord
     *            密码
     * @param localpath
     *            上传文件在本地磁盘路径
     * @param fileName
     *            文件名
     * @param remotePath
     *            文件要上传到ftp服务器的路径
     * @throws Exception
     */
    public static Boolean fileFtpUpload(String ip, int port, String userName,
            String passWord, String localpath, String fileName,
            String remotePath) throws Exception {
        FTPClient ftp = new FTPClient();// 创建客户端对象
        InputStream local = null;
        boolean flag = false;
        try {
            checkIsExsitFile(localpath, fileName);// 判断本地路径下有无该文件
            SocketAddress address = new InetSocketAddress(ip, port);
            ftp.connect(ip, port);// 连接
            ftp.login(userName, passWord);// 登录
            log.info("ftp服务器连接、登陆成功,地址为:" + address);
            // 检查上传路径是否存在 如果不存在返回false
            boolean flag1 = ftp.changeWorkingDirectory(remotePath);
            if (!flag1) {
                // 创建上传的路径 该方法只能创建一级目录,在这里如果/home/ftpuser存在则可创建image
                // ftp.makeDirectory(path);
                throw new Exception("ftp服务器上没有指定文件目录,请先创建:" + remotePath);
            }
            // 指定上传路径
            ftp.changeWorkingDirectory(remotePath);
            // 指定上传文件的类型 二进制文件
            ftp.setFileType(FTP.BINARY_FILE_TYPE);
            // 读取本地文件
            File file = new File(localpath + "\\" + fileName);
            local = new FileInputStream(file);
            // 第一个参数是文件名
            ftp.storeFile(file.getName(), local);
            log.info("上传成功");
            flag = true;
        } catch (SocketException e) {
            log.info("上传失败" + e);
            flag = false;
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                // 关闭文件流
                local.close();
                // 退出
                ftp.logout();
                // 断开连接
                ftp.disconnect();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return flag;
    }

上传文件之前需要先判断磁盘下有无指定文件,判断方法如下:

/**
	 * 判断文件路径下有无指定文件
	 *
	 * @param filePath
	 *            生成文件名称
	 * @param fileName
	 *            文件名称
	 * @return 是否创建成功,成功则返回true
	 */
	public static void checkIsExsitFile(String filePath, String fileName) {
		File dirFile = new File(filePath);// 文件夹对象
		try {
			File[] files = dirFile.listFiles();
			Boolean bl = false;
			for (File file1 : files) {
				if (fileName.equals(file1.getName())) {
					bl = true;
					break;
				}
			}
			// 如果文件夹内文件不存在,则报错
			if (!bl) {
				throw new Exception("文件路径下没有指定上传文件");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

注意在上传之前一定要先切换到当前目录,即这一行

// 指定上传路径
ftp.changeWorkingDirectory(remotePath);

同时需要指定上传文件的类型

// 指定上传文件的类型 二进制文件
ftp.setFileType(FTP.BINARY_FILE_TYPE);

下载

/**
     * ftp下载文件
     *
     * @param ip
     * @param port
     * @param userName
     * @param passWord
     * @param localPath
     * @param remotePath
     * @param fileContainsName
     *            文件包含名
     * @return
     * @throws Exception
     */
    public static String fileFtpDown(String ip, int port, String userName,
            String passWord, String localPath, String remotePath,
            String fileContainsName) throws Exception {
        FTPClient ftpClient = new FTPClient();// 创建客户端对象
        String fileName = "";
        SocketAddress address = new InetSocketAddress(ip, port);
        ftpClient.connect(ip, port);// 连接
        boolean login = ftpClient.login(userName, passWord);// 登陆
        if (login) {
            try {
                log.info("ftp服务器连接、登陆成功,地址为:" + address);
                ftpClient.enterLocalPassiveMode();// 开通一个端口来传输数据
                FTPFile[] fs = ftpClient.listFiles(remotePath);// fs为remoteFile下所有文件集合
                for (FTPFile ff : fs) {
                    String f = new String(ff.getName().getBytes("iso-8859-1"),
                            "utf-8");
                    if (f.contains(fileContainsName)) {// 文件名称不确定时用contains
                        File localFile = new File(localPath + "\\" + f); // 在本地指定路径创建了一个对象
                        OutputStream is = new FileOutputStream(localFile);
                        ftpClient.changeWorkingDirectory(remotePath);// 设置下载文件相对远程FTP根目录所处的路径
                        ftpClient.setFileType(FTP.BINARY_FILE_TYPE); // 开始下载文件前设置传输类型
                        ftpClient.retrieveFile(ff.getName(), is);
                        is.close();
                        fileName = f;
                    }
                    break;
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (ftpClient.isConnected()) {
                    try {
                        ftpClient.disconnect();
                    } catch (IOException ioe) {
                    }
                }
            }
        } else {
            log.info("ftp服务器连接、登陆失败");
        }
        return fileName;
    }

  

  

原文地址:https://www.cnblogs.com/xu-zheng/p/8994454.html

时间: 2024-10-11 13:52:17

Java中向ftp上传、下载文件的相关文章

Java中实现FTP上传下载文件的功能,完整代码

一个JAVA 实现FTP功能的代码,包括了服务器的设置模块,并包括有上传文件至FTP的通用方法.下载文件的通用方法以及删除文件.在ftp服务器上穿件文件夹.检测文件夹是否存在等,里面的有些代码对编写JAVA文件上传或许有参考价值,Java FTP主文件代码: package ftpDemo;         import java.io.DataOutputStream;         import java.io.InputStream;         import java.io.Out

2.1.5基础之命令行链接ftp dos中的ftp上传下载文件

Windows命令行batcmd脚本的应用之自动备份 异地备份2.1.5基础之命令行链接ftp dos中的ftp上传下载文件 讲解环境 VMware Workstation 12 桌面虚拟计算机软件创建虚拟机安装操作系统:http://edu.51cto.com/course/10007.html PC1:192.168.1.201 远程地址:192.168.100.100:2001 windows service2008 pc1 Admin111FTP虚拟用户 fileaa fileaaPC2

华为设备,通过tftp和ftp上传下载文件

真机IP192.168.10.10/24 R1 G0/0/0 IP192.168.10.1/24 在真机上搭建tftp服务器实现路由上传下载 使用tftpd32搭建TFTP服务器 R1配置 <R1>system-view                  //进入系统视图 [R1]interface GigabitEthernet 0/0/0     //进接口 [R1-GigabitEthernet0/0/0]ip address 192.168.10.1 24   // 配置接口IP [R

ftp上传下载文件

上传文件: <?php /** * ftp上传文件 */ $ftp_server='localhost';//服务器 $ftp_port='21';//端口 $ftp_user_name='ftp';//用户名 $ftp_user_pass='zxcasdqwe123';//密码 $ftp_put_dir='/root';//上传目录 $ftp_conn_id = ftp_connect($ftp_server,$ftp_port); $ftp_login_result = ftp_login(

在windows中使用xshell上传下载文件到linux中

使用centos的文件上传下载小工具,可以快速的帮助我们从本地上传文件至服务器,或者是从服务器下载文件至本地. 工具/原料 Centos xshell 方法/步骤 首先使用xshell 连接上服务器.新建一个连接,分别输入用户名和密码,再输入主机IP地址及端口号,选择ssh连接方式. 在连接属性中指定接收文件的文件夹 配置好连接属性之后连接上服务器 文件上传命令为rz,下载命令为sz,但是Linux可能没有安装该上传工具,所以输入rz和sz的时候会提示找不到该命令.所以需要需要使用命令安装下该工

FTP上传下载文件(面向对象版)

# 服务端 import socketserver import os import json import hashlib import struct class MySocketServer(socketserver.BaseRequestHandler): users = [] @staticmethod def get_dic(): # 获取密码库 user_dic = {} file_name = 'register' if file_name not in os.listdir(os

Java中使用FTPClient上传下载

一.上传文件 原理就不介绍了,大家直接看代码吧 /** * Description: 向FTP服务器上传文件 * @Version1.0 Jul 27, 2008 4:31:09 PM by 崔红保([email protected])创建 * @param url FTP服务器hostname * @param port FTP服务器端口 * @param username FTP登录账号 * @param password FTP登录密码 * @param path FTP服务器保存目录 *

linux中使用lftp上传下载文件

lftp是linux中一款ftp服务器相比windows中的ftp显得要复杂不少了,下面我来总结一下lftp文件上传,文件下载,及文件查找等等相关命令吧. lftp连接的几种方法,最常用的是lftp [email protected],这样可以不用明文输入密码. 1.lftp [email protected] 回车 输入密码 2.lftp name:[email protected] 回车 3.lftp site 回车login 用户名 密码 4.lftp 回车 open site 回车 lo

python实现ftp上传下载文件

#!/usr/bin/env python # encoding: utf-8 __author__ = "pwy" ''' 上传:上传文件并备份到其他目录 下载:下载文件,并删除远端文件 ''' from ftplib import FTP from time import sleep import os,datetime,logging from shutil import move HOST = "192.168.1.221" USER = "sxi