ftpUtil实现文件上传和下载

/**
 * ftp上传,下载
 
 */
public class FtpUtil {
    /**
     * 上传到文件服务器的账号
     */
    public static final String ACCOUNT = "";
    /**
     * 上传到文件服务器的密码
     */
    public static final String PASSWORD = "";
    /**
     * 上传到文件服务器的的root
     * 不能加/那样就不是在当前目录下找啦
     */
    public static final String PATH_ROOT = "/    /**
     * 上传到文件服务器的ip地址
     */
    public static final String IP = "";
    /**
     * 判断需不需要上传到文件服务器
     */
    public static final boolean isUploadOrDown = false;

 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服务器
  * 
  */
 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进制上传、下载
   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();
   }
   return true;
  } catch (IOException e) {
   e.printStackTrace();
   return false;
  }
 }

 /**
  * 检查文件夹在当前目录下是否存在
  */
 public boolean isDirExist(String dir) {
  String pwd = "";
  try {
   pwd = ftpClient.pwd();
   ftpClient.cd(dir);
   ftpClient.cd(pwd);
  } catch (Exception e) {
   return false;
  }
  return true;
 }
 
 /**
  * * 删除FTP上的文件 *
  *
  * @param ftpDirAndFileName
  */
 public boolean deleteFile(String ftpDirAndFileName) {
  try{
   ftpClient.sendServer("DELE " + ftpDirAndFileName + "\r\n");
   return true;
  }catch (Exception e){
   e.printStackTrace();
   return false;
  }
  
 }

 /**
  * * 删除FTP目录 *
  */
 public boolean deleteDirectory(String ftpDirectory) {
  try{
   ftpClient.sendServer("XRMD " + ftpDirectory + "\r\n");
   return true;
  }catch (Exception e){
   e.printStackTrace();
   return false;
  }
 }

 /**
  * 在当前目录下创建文件夹
  */
 public 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的文件夹,该文件夹中与要上传的文件夹中同名的文件将被替换
  */
 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的文件夹,该文件夹中与要上传的文件夹中同名的文件将被替换
  *
  * @param fileName
  *            要上传的文件(或文件夹)名
  * @param newName
  *            服务器段要生成的文件(或文件夹)名
  * @return
  */
 public boolean upload(String fileName, String newName) {
  try {
   String savefilename = new String(fileName.getBytes("ISO-8859-1"),"utf-8");
   File file_in = new File(fileName);// 打开本地待上传的文件
   if (!file_in.exists()) {
    throw new Exception("此文件或文件夹[" + file_in.getName() + "]有误或不存在!");
   }
   if (file_in.isDirectory()) {
    upload(file_in.getPath(), newName, ftpClient.pwd());
   } else {
    uploadFile(file_in.getPath(), newName);
   }

   if (is != null) {
    is.close();
   }
   if (os != null) {
    os.close();
   }
   return true;
  } catch (Exception e) {
   e.printStackTrace();
   System.err.println("Exception e in Ftp upload(): " + e.toString());
   return false;
  } finally {
   try {
    if (is != null) {
     is.close();
    }
    if (os != null) {
     os.close();
    }
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
 }

 /**
  * 真正用于上传的方法
  */
 private void upload(String fileName, String newName, String path)
   throws Exception {
  String savefilename = new String(fileName.getBytes("ISO-8859-1"), "GBK");
  File file_in = new File(fileName);// 打开本地待长传的文件
  if (!file_in.exists()) {
   throw new Exception("此文件或文件夹[" + file_in.getName() + "]有误或不存在!");
  }
  if (file_in.isDirectory()) {
   if (!isDirExist(newName)) {
    createDir(newName);
   }
   ftpClient.cd(newName);
   File sourceFile[] = file_in.listFiles();
   for (int i = 0; i < sourceFile.length; i++) {
    if (!sourceFile[i].exists()) {
     continue;
    }
    if (sourceFile[i].isDirectory()) {
     this.upload(sourceFile[i].getPath(), sourceFile[i]
       .getName(), path + "/" + newName);
    } else {
     this.uploadFile(sourceFile[i].getPath(), sourceFile[i]
       .getName());
    }
   }
  } else {
   uploadFile(file_in.getPath(), newName);
  }
  ftpClient.cd(path);
 }

 /**
  * upload 上传文件
  *
  * @param filename
  *            要上传的文件名
  * @param newname
  *            上传后的新文件名
  * @return -1 文件不存在 >=0 成功上传,返回文件的大小
  * @throws Exception
  */
 public long uploadFile(String filename, String newname) throws Exception {
  long result = 0;
  TelnetOutputStream os = null;
  FileInputStream is = null;
  try {
   java.io.File file_in = new java.io.File(filename);
   if (!file_in.exists())
    return -1;
   os = ftpClient.put(newname);
   result = file_in.length();
   is = new FileInputStream(file_in);
   byte[] bytes = new byte[1024];
   int c;
   while ((c = is.read(bytes)) != -1) {
    os.write(bytes, 0, c);
   }
  } finally {
   if (is != null) {
    is.close();
   }
   if (os != null) {
    os.close();
   }
  }
  return result;
 }
 
 /**
  * 通过流直接上传文件
  */
 public boolean upload(InputStream fins, String newname) throws Exception {
  TelnetOutputStream os = null;
  try {
   os = ftpClient.put(newname);
   System.out.println(newname);
   if(fins == null){
    return false;
   }
   byte[] bytes = new byte[1024];
   int c;
   while ((c = fins.read(bytes)) != -1) {
    os.write(bytes, 0, c);
   }
   
   return true;
  } catch (Exception e){
   e.printStackTrace();
   return false;
   
  }finally {
   if (is != null) {
    is.close();
   }
   if (os != null) {
    os.close();
   }
  }
 }
 
 
 
 /**
  *通过流 从ftp下载文件到本地
  *
  * @param filename
  *            服务器上的文件名
  *        
  * @return    输出流
  * @throws Exception
  */
 public InputStream download( String filename) {
  TelnetInputStream is = null;
  try {
   is = ftpClient.get(filename);
   return is;
  } catch (IOException e) {
   
   e.printStackTrace();
   return null;
  } finally {
  }
 }
 
 /**
  * 从ftp下载文件到本地
  *
  * @param filename
  *            服务器上的文件名
  * @param newfilename
  *            本地生成的文件名
  * @return
  * @throws Exception
  */
 public long downloadFile(String filename, String newfilename) {
  long result = 0;
  TelnetInputStream is = null;
  FileOutputStream os = null;
  try {
   is = ftpClient.get(filename);
   java.io.File outfile = new java.io.File(newfilename);
   os = new FileOutputStream(outfile);
   byte[] bytes = new byte[1024];
   int c;
   while ((c = is.read(bytes)) != -1) {
    os.write(bytes, 0, c);
    result = result + c;
   }
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   try {
    if (is != null) {
     is.close();
    }
    if (os != null) {
     os.close();
    }
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
  return result;
 }

 /**
  * 取得相对于当前连接目录的某个目录下所有文件列表
  *
  * @param path
  * @return
  */
 public List getFileList(String path) {
  List list = new ArrayList();
  DataInputStream dis;
  try {
   dis = new DataInputStream(ftpClient.nameList(this.path + path));
   String filename = "";
   while ((filename = dis.readLine()) != null) {
    list.add(filename);
   }
  } catch (IOException e) {
   e.printStackTrace();
  }
  return list;
 }
   
     /**
     * 上传到文件服务器的方法
     */
    public static boolean upLoadFileServer(String loadFileName,String ServFileName,String branchPath){
        FtpUtil ftp = new FtpUtil(FtpUtil.IP, FtpUtil.ACCOUNT, FtpUtil.PASSWORD);
        ftp.connectServer();
        //目前创建一个文件夹
        if(!("".equals(branchPath) || branchPath == null) && !ftp.isDirExist("vgop_attachment"+"/"+branchPath)){
            ftp.getFileList("/weblogic/test");
//        for (int i = 0; i < list.size(); i++) {
//            String name = list.get(i).toString();
//            System.out.println(name);
//        }
        ftp.closeServer();
        return true;
    }

 public static void main(String[] args) {
        
        
  
   }

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值