`
ErHuo
  • 浏览: 21863 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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.InputStream;
import java.io.OutputStream;

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;


public class FTPDemo {
	private static FTPClient ftpClient = new FTPClient();
    private static String encoding = System.getProperty("file.encoding");
    /**
     * Description: 向FTP服务器上传文件
     *
     * @Version1.0
     * @param url
     *            FTP服务器hostname
     * @param port
     *            FTP服务器端口
     * @param username
     *            FTP登录账号
     * @param password
     *            FTP登录密码
     * @param path
     *            FTP服务器保存目录,如果是根目录则为“/”
     * @param filename
     *            上传到FTP服务器上的文件名
     * @param input
     *            本地文件输入流
     * @return 成功返回true,否则返回false
     */
    public static boolean uploadFile(String url, int port, String username,
            String password, String path, String filename, InputStream input) {
        boolean result = false;
 
        try {
            int reply;
            // 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
            ftpClient.connect(url);
            // ftp.connect(url, port);// 连接FTP服务器
            // 登录
            ftpClient.login(username, password);
            ftpClient.setControlEncoding(encoding);
            // 检验是否连接成功
            reply = ftpClient.getReplyCode();
            if (!FTPReply.isPositiveCompletion(reply)) {
                System.out.println("连接失败");
                ftpClient.disconnect();
                return result;
            }
 
            // 转移工作目录至指定目录下
            boolean change = ftpClient.changeWorkingDirectory(path);
            ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
            if (change) {
            	ftpClient.enterLocalPassiveMode();
                result = ftpClient.storeFile(new String(filename.getBytes(encoding),"iso-8859-1"), input);
                if (result) {
                    System.out.println("上传成功!");
                }
            }
            input.close();
            ftpClient.logout();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (ftpClient.isConnected()) {
                try {
                    ftpClient.disconnect();
                } catch (IOException ioe) {
                	ioe.printStackTrace();
                }
            }
        }
        return result;
    }
 
    /**
     * 将本地文件上传到FTP服务器上
     *
     */
    public void testUpLoadFromDisk() {
        try {
            FileInputStream in = new FileInputStream(new File("D:/1.html"));
            boolean flag = uploadFile("115.159.62.82", 21, "账号","密码", "/", "2.html", in);
            System.out.println(flag);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
 
 
    /**
     * Description: 从FTP服务器下载文件
     *
     * @Version1.0
     * @param url
     *            FTP服务器hostname
     * @param port
     *            FTP服务器端口
     * @param username
     *            FTP登录账号
     * @param password
     *            FTP登录密码
     * @param remotePath
     *            FTP服务器上的相对路径
     * @param fileName
     *            要下载的文件名
     * @param localPath
     *            下载后保存到本地的路径
     * @return
     */
    public static boolean downFile(String url, int port, String username,
            String password, String remotePath, String fileName,
            String localPath) {
        boolean result = false;
        try {
            int reply;
            ftpClient.setControlEncoding(encoding);
             
            /*
             *  为了上传和下载中文文件,有些地方建议使用以下两句代替
             *  new String(remotePath.getBytes(encoding),"iso-8859-1")转码。
             *  经过测试,通不过。
             */
//            FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);
//            conf.setServerLanguageCode("zh");
 
            ftpClient.connect(url, port);
            // 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
            ftpClient.login(username, password);// 登录
            // 设置文件传输类型为二进制
            ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
            // 获取ftp登录应答代码
            reply = ftpClient.getReplyCode();
            // 验证是否登陆成功
            if (!FTPReply.isPositiveCompletion(reply)) {
                ftpClient.disconnect();
                System.err.println("FTP server refused connection.");
                return result;
            }
            // 转移到FTP服务器目录至指定的目录下
            ftpClient.changeWorkingDirectory(new String(remotePath.getBytes(encoding),"iso-8859-1"));
            // 获取文件列表
            FTPFile[] fs = ftpClient.listFiles();
            for (FTPFile ff : fs) {
                if (ff.getName().equals(fileName)) {
                    File localFile = new File(localPath + "/" + ff.getName());
                    OutputStream is = new FileOutputStream(localFile);
                    ftpClient.retrieveFile(ff.getName(), is);
                    is.close();
                }
            }
 
            ftpClient.logout();
            result = true;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (ftpClient.isConnected()) {
                try {
                    ftpClient.disconnect();
                } catch (IOException ioe) {
                }
            }
        }
        return result;
    }
 
    /**
     * 将FTP服务器上文件下载到本地
     *
     */
    public void testDownFile() {
        try {
//            boolean flag = downFile("IP", 21, "账号",
//                    "密码", "/", "1.html", "D:/");
        	testUpLoadFromDisk();
            //System.out.println(flag);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
     
    public static void main(String[] args) {
        FTPDemo fa = new FTPDemo();
        fa.testDownFile();
    }
}





驱动包在附件
分享到:
评论

相关推荐

    WebAudioAPIError(解决方案).md

    项目中常见的问题,记录一下解决方案

    avnet(安富利)网站详情页数据样例

    avnet(安富利)网站详情页数据样例

    1-全国各地区建筑业-二级专业承包建筑业企业利润总额2005-2012年-社科数据.zip

    该数据集涵盖了2005至2012年间全国各地区二级专业承包建筑业企业的利润总额。这些数据不仅包括了原始数据,还提供了线性插值和ARIMA填补的版本,以便于研究者能够根据不同的需求选择合适的数据形式进行分析。数据集中包含了行政区划代码、地区名称、是否属于长江经济带、经纬度信息、年份以及利润总额等关键指标。这些指标为评估企业的经营效益和盈利水平提供了重要依据,同时也反映了建筑业在不同地区的发展态势。数据来源为国家统计局,确保了数据的权威性和准确性。通过这些数据,研究者可以深入分析建筑业的经济贡献及其在宏观经济中的作用,为政策制定和行业规划提供数据支持。

    CentOS6.4X64安装Oracle11g中文2.05MB最新版本

    本文档主要讲述的是CentOS6.4 X64安装Oracle11g;在CentOS安装oracle11g比安装oracle10g简单很多,oracle可以不设置比如OS内核参数、防火墙、环境变量等,所以实施时推荐安装oracle11g。感兴趣的朋友可以过来看看

    发动机零部件质量信息反馈及处理表.docx

    发动机零部件质量信息反馈及处理表.docx

    1-全国省市县土地利用类型面板数据2009-2021年-社科数据.zip

    全国省市县土地利用类型面板数据2009-2021年是一项详尽的数据集,它基于土地利用方式和地域差异,对土地资源单元进行细致划分,反映了土地的用途、性质和分布规律。该数据集涵盖了全国各省、地级市、县的土地利用类型,包括耕地、园地、林地、交通运输用地、水域及沙地等多种土地类型。时间范围上,省级和地级市的土地利用类型面板数据覆盖2009至2021年;县级土地利用类型面板数据则从2019年开始至2021年。数据指标丰富,包括行政单位、年份以及各类土地利用的具体分类,如水田、水浇地、旱地、果园、茶园等,以及城镇村及工矿用地、交通运输用地、水域及水利设施用地等。这些数据为政府决策、规划编制以及土地资源管理提供了坚实的数据基础,有助于全面了解土地资源的利用状况,并为未来的规划和管理提供支持。

    MediaError(解决方案).md

    项目中常见的问题,记录一下解决方案

    前端跳槽突围课:React18底层源码深入剖析(完结21章)

    好课分享——前端跳槽突围课:React18底层源码深入剖析(完结21章)

    1111java后端1111Controller

    1111java后端1111Controller

    嵌入式系统开发-STM32单片机-电子春联-代码设计

    嵌入式系统开发-STM32单片机-电子春联-代码设计

    潜在失效模式及后果分析(FMEA)应用流程.docx

    潜在失效模式及后果分析(FMEA)应用流程.docx

    使用Python和Matplotlib创建动态3D圣诞树动画

    内容概要:本文详细介绍了如何使用Python和Matplotlib库创建一个动态的3D圣诞树动画。通过代码示例,展示了几何形状的创建方法,如圣诞树的形状、装饰品和星星的位置计算,以及如何通过动画更新函数实现闪烁效果。 适合人群:具有一定Python编程基础的开发者,尤其是对Matplotlib库和数据可视化感兴趣的读者。 使用场景及目标:① 学习Matplotlib库的基本用法,包括3D绘图和动画制作;② 掌握几何形状的数学建模方法,如圆锥和球体;③ 实践动画效果的实现技巧,提升编程技能。 阅读建议:本教程以具体代码示例为主,理论与实践相结合。建议读者在阅读过程中亲自编写和运行代码,逐步理解每一步骤的实现细节。

    开发一个带有 PCIe Endpoint 设备的驱动程序并实现热插拔功能.docx

    开发一个带有 PCIe Endpoint 设备的驱动程序并实现热插拔功能

    ASP+ACCESS课程教学网站信息交流与发布系统(源代码+论文+外文翻译)(源代码+论文+说明文档).zip

    【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。

    消防气压给水设备和稳压泵安装 分项工程质量验收记录表.docx

    消防气压给水设备和稳压泵安装 分项工程质量验收记录表.docx

    Cytoscape-3-10-0-windows-64bit.exe

    Cytoscape-3-10-0-windows-64bit.exe

    ASP物资管理系统设计与实现(源代码+论文)(源代码+论文+说明文档).zip

    【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。

    [net毕业设计]asp.net学生成绩管理系统(源代码+论文).zip

    【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。

    电力场景输电线电缆缺陷检测数据集VOC+YOLO格式1167张8类别.zip

    文件太大放服务器下载,请务必先到资源详情查看然后下载 样本图参考:blog.csdn.net/2403_88102872/article/details/143977852 数据集格式:Pascal VOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):1167 标注数量(xml文件个数):1167 标注数量(txt文件个数):1167 标注类别数:8 标注类别名称:["ddan_boc_tt","ddan_ct","ddan_ct_tua","ddan_ct_vatla","ddan_tran_tt","ddan_tt_mon","ddan_tt_tua","ddan_tt_vatla"]

    SYBASE的存储过程编写经验和方法中文最新版本

    本文档主要讲述的是SYBASE的存储过程编写经验和方法;主要是针对Sybase和SQL Server数据库,但其它数据库应该有一些共性。适用数据库开发程序员,数据库的数据量很多,涉及到对SP(存储过程)的优化的项目开发人员,对数据库有浓厚兴趣的人。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看

Global site tag (gtag.js) - Google Analytics