zoukankan      html  css  js  c++  java
  • 使用sun.net.ftp.FtpClient进行上传功能开发,在jdk1.7上不适用问题的解决

    之前项目上开发了一个上传文件的功能,使用的是sun.net.ftp.FtpClient这个类

    连接服务器的代码大概如下:

    public static FtpClient ftpClient = null;

     ftpClient = new FtpClient();
     ftpClient.openServer(server);
      ftpClient.login(user, password);

    之前这个功能是在jdk1.6基础上进行开发的。使用一切正常。

    但是因为客户的环境上已经有了jdk1.7的环境,所以直接进行部署,发现文件上传失败,并且报如下错误:

    cannont instantiate the type FtpClient

    经过调查,发现

    1) sun.net.ftp.FtpClient 这个类在jdk的帮助文档中没有具体的说明,也就是并没有对外公开。并且这个类是在jdk的 rt.jar中实现的。

    2)jdk1.7下其构造函数FtpClient()被定义为private类型,所以无法new了。 在jdk1.7,已经换成了 FtpClient.create(ip)方法

    同时,其他的一些方法也基本都改掉了,

    如 ftpClient.openServer(server);
      ftpClient.login(user, password);

    就可以换成:ftpClient.login(user, null, password);   

      ftpClient.binary();  --->  ftpClient.setBinaryType();   

    ftpClient.put(remotefilename);--->ftpClient.putFileStream(remotefilename, true);   

    等。

    如果这样的话,解决这个问题有2个办法:

    1. 重写这个上传功能, 但是1.6版本怎么办呢, 可能需要根据jdk版本进行分开处理

    2. 在 既存的服务器上,构筑1.6的环境,然后 tomcat 启动的时候,加载1.6的jdk。

    这个在linux或者windows上都非常方便。 如果windowss上,tomcat是以服务形式启动的话,直接修改,关联的java 虚拟机源就可以了。

  • 相关阅读:
    1 win10双系统安装ubuntu16.04和18.04(问题详细记录)
    一些操作记录备查
    SecureCRT中文乱码解决方法
    Oracle中的NVL函数
    本机不安装Oracle客户端,使用PL/SQL Developer连接远程数据库
    DevExpress DateEdit控件选择精确到秒
    DevExpress GridView 整理
    Linux 删除文件夹和文件的命令
    DevExpress之XtraReport 学习
    解决Visual Studio Community 2017工具栏中没有Report Viewer的问题
  • 原文地址:https://www.cnblogs.com/superch0054/p/4010077.html
Copyright © 2011-2022 走看看