package cn.itcast.crm.util; import java.io.DataInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; import java.util.StringTokenizer; import org.xvolks.jnative.exceptions.NativeException; import sun.net.TelnetInputStream; import sun.net.TelnetOutputStream; import sun.net.ftp.FtpClient; import cn.reader.reader.ReadTag; /** * ftp上传,下载 * * @author why 2009-07-30 * */ public class FtpUtil { private String ip = ""; private String username = ""; private String password = ""; private int port = -1; private String path = ""; FtpClient ftpClient = null; OutputStream os = null; FileInputStream is = null; public FtpUtil(String serverIP, String username, String password) { this.ip = serverIP; this.username = username; this.password = password; } public FtpUtil(String serverIP, int port, String username, String password) { this.ip = serverIP; this.username = username; this.password = password; this.port = port; } /** * 连接ftp服务器 * * @throws IOException */ 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 (this.path.length() != 0) { ftpClient.cd(this.path);// path是ftp服务下主目录的子目录 } ftpClient.binary();// 用2进制上传、下载 System.out.println("已登录到\"" + ftpClient.pwd() + "\"目录"); return true; } catch (IOException e) { e.printStackTrace(); return false; } } /** * 断开与ftp服务器连接 * * @throws IOException */ 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; } } /** * 检查文件夹在当前目录下是否存在 * * @param dir *@return */ private boolean isDirExist(String dir) { String pwd = ""; try { pwd = ftpClient.pwd(); ftpClient.cd(dir); ftpClient.cd(pwd); } catch (Exception e) { return false; } return true; } /** * 在当前目录下创建文件夹 * * @param dir * @return * @throws Exception */ private boolean createDir(String dir) { try { ftpClient.ascii(); StringTokenizer s = new StringTokenizer(dir, "/"); // sign s.countTokens(); String pathName = ftpClient.pwd(); while (s.hasMoreElements()) { pathName = pathName + "/" + (String) s.nextElement(); try { ftpClient.sendServer("MKD " + pathName + "\r\n"); } catch (Exception e) { e = null; return false; } ftpClient.readServerResponse(); } ftpClient.binary(); return true; } catch (IOException e1) { e1.printStackTrace(); return false; } } /** * ftp上传 如果服务器段已存在名为filename的文件夹,该文件夹中与要上传的文件夹中同名的文件将被替换 * * @param filename * 要上传的文件(或文件夹)名 * @return * @throws Exception */ public boolean upload(String filename) { String newname = ""; if (filename.indexOf("/") >-1) { newname = filename.substring(filename.lastIndexOf("/") + 1); } else { newname = filename; } return upload(filename, newname); } /** * ftp上传 如果服务器段已存在名为newName的文件夹,该文件夹