luosh123 2016-09-29 01:10 采纳率: 100%
浏览 7195
已采纳

java 在ftp服务器创建目录失败!请求各位大神看看,非常感谢!!

今天工作用需要用到ftp上传整个文件,在网上查了资料一直报错,都困扰我一天了,代码如下:
package cn.lsh.test;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.StringTokenizer;

import sun.net.ftp.FtpClient;

public class FtpUtils {
private String ip="";
private String username="";
private String password ="";
private int port= -1;
private String path ="";
FtpClient ftpClient =null;
FileInputStream is =null;
OutputStream os = null;

public FtpUtils(String serverIP,String username,String password){
    this.ip =serverIP;
    this.username = username;
    this.password = password;
}
public FtpUtils(String serverIP,String username,String password,int port){
    this.ip =serverIP;
    this.username = username;
    this.password = password;
    this.port =port;
}
/*
 * 连接ftp服务器
 */
public boolean connectServer(){
    ftpClient = new FtpClient();
        try {
            if(this.port != -1){
                ftpClient.openServer(this.ip,this.port);
            }else{
                ftpClient.openServer(this.ip);
            }
            ftpClient.login(this.username, this.password);
            if(path.length() != 0){
                ftpClient.cd(path);
            }
            ftpClient.binary();
            System.out.println("已登录到\""+ftpClient.pwd() +"\"目录");
            return true;
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
}
/*
 * 断开ftp服务器连接
 */
public boolean closeServer(){
    try{
        if(is != null){
            is.close();
        }
        if(os != null){
            os.close();
        }
        if(ftpClient != null){
            ftpClient.closeServer();
        }
        System.out.println("已从服务器断开连接");
        return true;
    }catch(IOException e){
        e.printStackTrace();
        return false;
    }
}
/*
 * 在当前目录下创建文件夹
 */
public boolean createDir(String dir){
    try{
        ftpClient.ascii();
        StringTokenizer s = new StringTokenizer(dir, "/");
        s.countTokens();
        String pathName = ftpClient.pwd();
        while(s.hasMoreElements()){
            pathName = pathName + "/" + (String)s.nextElement();
            try{
                ftpClient.sendServer("MKD"+pathName+"/n/r");
            }catch(Exception e){
                e =null;
                return false;
            }
            ftpClient.readServerResponse();
        }
        ftpClient.binary();
        return true;
    }catch(IOException e1){
        e1.printStackTrace();
        return false;
    }
}
//测试!!
public static void main(String[] args){
    FtpUtils ftp = new FtpUtils("127.0.0.1", "lsh", "lsh123");
    ftp.connectServer();
    ftp.createDir("testDir");
    ftp.closeServer();
}

}

报错信息:
已登录到"/"目录
sun.net.ftp.FtpProtocolException: TYPE I:500 '
TYPE I': command not understood.

at sun.net.ftp.FtpClient.issueCommandCheck(Unknown Source)
at sun.net.ftp.FtpClient.binary(Unknown Source)
at cn.lsh.test.FtpUtils.createDir(FtpUtils.java:94)
at cn.lsh.test.FtpUtils.main(FtpUtils.java:105)

已从服务器断开连接

我要是把
ftpClient.sendServer("MKD"+pathName+"\n\r");改成
ftpClient.sendServer("MKD"+pathName+"/n/r");
程序运行很长时间,最后报socket错误!

我也是崩溃了!

展开全部

  • 写回答

2条回答 默认 最新

  • 你我多虚伪 2016-09-29 01:23
    关注

    还有,你写的文件的path最好用(File.separator ),而不是用“/”,即:你的代码(pathName = pathName + "/" + (String)s.nextElement();)改为:pathName = pathName + File.separator + (String)s.nextElement();

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)
编辑
预览

报告相同问题?

悬赏问题

  • ¥15 centos7.6进不去系统,卡在数字7界面
  • ¥15 Tensorflow采用interpreter.allocate_tensors()分配内存出现ValueError: vector too long报错
  • ¥15 使用CGenFF在线生成血红素辅基拓扑结构遇到问题
  • ¥15 在fragment使用okhttp同步上传文件,能不能在fragment销毁后还可以继续上传文件?
  • ¥20 matlab代码实现可达矩阵形成骨骼矩阵
  • ¥15 关于地板的木纹和图库中的匹配的
  • ¥30 机器学习预测疾病模型流程疑问
  • ¥50 2048Python实现
  • ¥15 使用ads进行低噪放仿真没有结果且不报错
  • ¥15 关于#python#的问题:有偿求一个千寻框架找书机器人插件
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部