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

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 09:23
    关注

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

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

报告相同问题?

悬赏问题

  • ¥50 汇编语言除法溢出问题
  • ¥50 C++实现删除N个数据列表共有的元素
  • ¥15 Visual Studio问题
  • ¥15 state显示变量是字符串形式,但是仍然红色,无法引用,并显示类型不匹配
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗