package www.experience.handleFile;import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.SocketException;
import java.text.SimpleDateFormat;
import java.util.Properties;import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPClientConfig;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;public class FtpProcess {
public static Log logger = LogFactory.getLog(FtpProcess.class); 
private static String username;         //FTP 登录用户名 
    private static String password;         //FTP 登录密码 
    private static String ip;                     //FTP 服务器地址IP地址 
    private static int port;                        //FTP 端口 
    private static Properties property = null;    //属性集 
    private static String configFile = "E:\\workspace\\myDemo\\src\\config\\ftpconfig.properties";    //配置文件的路径名 
    private static FTPClient ftpClient = null; //FTP 客户端代理
    private static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm");
    public static int i = 1;  //FTP状态码 
    
    //参考url  http://lavasoft.blog.51cto.com/62575/100386
    //url2 http://blog.csdn.net/cyhgohappy/archive/2008/05/12/2437534.aspx
    public FtpProcess(){
     File file = new File(configFile);
     property = new Properties(); 
     try{    
//     BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
//     property.load(bis);
//     this.username = property.getProperty("username");
//     this.password = property.getProperty("password");
//     this.ip = property.getProperty("ip");
//     this.port = Integer.parseInt(property.getProperty("port"));
     this.username = "wanww";
     this.password = "wanww";
     this.ip = "192.168.8.251";
     this.port = 21;
     }catch(Exception ex){
     ex.printStackTrace();
     }
    }
    
  //创建目录
public static void mkdCatalog(String dir){
try {
connectServer();
System.out.println(username+" "+password+" "+ip+"   "+port);
String []folder = dir.split("//|/");
String contact = "/";
for(int i = 0,j=folder.length;i<j;i++){
if(null!=folder[i]&&!"".equals(folder[i])){
contact=contact+folder[i]+"/";
boolean bool = ftpClient.changeWorkingDirectory(folder[i]);
System.out.println("bool:..."+bool);
if(!bool){
System.out.println(contact);
boolean s = ftpClient.makeDirectory(contact);//makeDirectory一次只能创建一个目录
System.out.println("<><><>:"+s);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}finally{
distory();//可能出现多个ftp,防止出现冲突
}
}
    
private static void distory(){
try{
ftpClient.disconnect();
ftpClient = null;
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
    
   
    /**
     * 连接到服务器
     * @return return true 连接服务器成功,false 连接服务器失败
     */
public static boolean connectServer(){
boolean flag = true;
if(null==ftpClient){
int reply ;
ftpClient = new FTPClient();
ftpClient.setControlEncoding("gbk");
ftpClient.setDefaultPort(port);
// ftpClient.configure(ftpConfig());
try {
ftpClient.connect(ip);
ftpClient.login(username, password);
ftpClient.setDataTimeout(120000);
reply = ftpClient.getReplyCode(); 
if(!FTPReply.isPositiveCompletion(reply)){
ftpClient.disconnect();
System.err.println("FTP server refused connection."); 
}
i++;
} catch (SocketException e) {
// TODO Auto-generated catch block
flag = false;
System.err.println("登录ftp服务器 " + ip + " 失败,连接超时!"); 
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
flag = false;
System.err.println("登录ftp服务器 " + ip + " 失败,FTP服务器无法打开!"); 
e.printStackTrace();

}
return flag;
}
// private static FTPClientConfig ftpConfig(){
// FTPClientConfig clientConfig = new FTPClientConfig(FTPClientConfig.SYST_NT);
// clientConfig.setServerLanguageCode(FTP.DEFAULT_CONTROL_ENCODING);
// return clientConfig;
// }

public static void main(String[] args) {
new FtpProcess();
System.out.println(username);
System.out.println(password);
System.out.println(ip);
System.out.println(port);


mkdCatalog("//sssssss//");

}
}

解决方案 »

  1.   

    向ftp远程服务器创建目录不成功(能上传),在本机器能够成功
      

  2.   

    package com.rlm.infra.utils;import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;import org.apache.commons.net.ftp.FTPClient;
    import org.apache.commons.net.ftp.FTPFile;import com.rlm.infra.log.RLMLog;public class FTPUtils {

    private String localfilename;
    private String remotefilename; FTPClient ftpClient;
    FTPFile[] fileList; public void connect(String server, Integer port, String user, String password,
    String path) {
    try {
    ftpClient = new FTPClient();
    ftpClient.connect(server, port);
    ftpClient.login(user, password);
    RLMLog.write(RLMLog.LEVEL_INFO, "ftp -- login success !!! ");
    if (path.length() != 0) {
    boolean flag = ftpClient.changeWorkingDirectory(path);
    if (flag) {
    RLMLog.write(RLMLog.LEVEL_INFO, "ftp -- set working directory to " + path);
    }
    }
    } catch (IOException e) {
    RLMLog.write(RLMLog.LEVEL_INFO, "ftp -- not login !!! ");
    RLMLog.write(RLMLog.LEVEL_ERROR, e.toString());
    }
    } public void close() {
    try {
    ftpClient.disconnect();
    // RLMLog.write(RLMLog.LEVEL_INFO, "ftp disconnect success !!! ");
    } catch (IOException e) {
    RLMLog.write(RLMLog.LEVEL_INFO, "ftp not disconnect !!! ");
    RLMLog.write(RLMLog.LEVEL_ERROR, e.toString());
    }
    }

    public void upload() {
    try {
    File localFile = new File(localfilename);
    FileInputStream fis = new FileInputStream(localFile);
    boolean flag = ftpClient.storeFile(remotefilename, fis);
    RLMLog.write(RLMLog.LEVEL_INFO, "ftp -- local file " + localfilename);
    RLMLog.write(RLMLog.LEVEL_INFO, "ftp -- remote filename " + remotefilename);
    if (flag) {
    RLMLog.write(RLMLog.LEVEL_INFO, "ftp -- file upload success !!! ");
    // ftpClient.rename(tempFileName, destinationFileName);
    }
    fis.close();
    } catch (FileNotFoundException e) {
    RLMLog.write(RLMLog.LEVEL_ERROR, e.toString());
    } catch (IOException e) {
    RLMLog.write(RLMLog.LEVEL_ERROR, e.toString());
    }
    }

    public void upload(String uploadFilePath) {
    // String uploadFilePath = "d:/ftp";
    try {
    File uploadFile = new File(uploadFilePath);
    File[] fileList = uploadFile.listFiles();
    if (fileList == null) {
    return;
    }
    for (int i = 0; i < fileList.length; i++) {
    FileInputStream fis = new FileInputStream(fileList[i]);
    String destinationFileName = fileList[i].getName();
    String tempFileName = " temp_ " + destinationFileName; boolean flag = ftpClient.storeFile(tempFileName, fis);
    if (flag) {
    RLMLog.write(RLMLog.LEVEL_INFO, "ftp -- file upload success !!! ");
    ftpClient.rename(tempFileName, destinationFileName);
    }
    fis.close();
    }
    } catch (IOException e) {
    RLMLog.write(RLMLog.LEVEL_INFO, "ftp -- file not upload !!! ");
    RLMLog.write(RLMLog.LEVEL_ERROR, e.toString());
    }
    } public void download() {
    try {
    fileList = ftpClient.listFiles();
    ftpClient.makeDirectory(" zjp "); 
    ftpClient.removeDirectory(" zjp ");
    for (int i = 0; i < fileList.length; i++) {
    String name = fileList[i].getName();
    File temp_file = new File(" c:/ " + " temp_ " + name);
    File dest_file = new File(" c:/ " + name);
    FileOutputStream fos = new FileOutputStream(temp_file);
    boolean flag = ftpClient.retrieveFile(name, fos);
    fos.close();
    if (flag) {
    temp_file.renameTo(dest_file);
    RLMLog.write(RLMLog.LEVEL_INFO, "ftp -- file download success !!! ");
    }
    }
    } catch (IOException e) {
    RLMLog.write(RLMLog.LEVEL_INFO, "ftp -- file not download !!! ");
    RLMLog.write(RLMLog.LEVEL_ERROR, e.toString());
    }
    }

    public void setLocalfilename(String localfilename) {
    this.localfilename = localfilename;
    } public void setRemotefilename(String remotefilename) {
    this.remotefilename = remotefilename;
    }

    }
      

  3.   

    FTPClient 可以去apache下载
    也可以csdn下载,我上传了资源名是common-net-ftp