ftp操作文件

如果用到了判断文件是否存在的方法,其实是遍历文件的方法需要吧jdk升级到1.6.023以上的版本,低于1.7

1.将JDK换成1.6.023或者以上的,如果不行进行下面的办法操作。

2.缺少了jakarta-oro-2.0.8.jar文件,将此包放入工程中(这个我试过不行,还是第一种,吧jdk1.6替换未1.6.023以上的版本,不能超过1.7


还有ftp容易出现乱码,以及中文无法创建


  String str = "何清华问佳111";
  
       FTPUtils ftpUtil = getInstance();
   ftpUtil.connect();
   ftpUtil.open();
   ftpUtil.mkdirs( new String(str.getBytes("UTF-8"),"iso-8859-1"));

   ftpUtil.close();




 
FTP协议里面,规定文件名编码为iso-8859-1,所以只能建转码以后的目录





今天给大家带来自己写的ftp操作类,主要用于java网站、桌面程序的文件上传,图片上传以及压缩处理。本文中需要用到commons-net-2.2.jar   thumbnailator-0.4.8.jar,请大家自行下载。

[java]  view plain  copy
  1. package com.hengyi.ftpdemo;  
  2.   
  3. import java.io.File;  
  4. import java.io.FileInputStream;  
  5. import java.io.IOException;  
  6. import java.io.InputStream;  
  7. import java.net.SocketException;  
  8.   
  9. import org.apache.commons.net.ftp.FTPClient;  
  10. import org.apache.commons.net.ftp.FTPReply;  
  11.   
  12. import net.coobird.thumbnailator.Thumbnails;  
  13.   
  14. /** 
  15.  * FTP工具类 
  16.  * @author 繁华 
  17.  */  
  18. public class FTPUtils {  
  19.     private static FTPUtils instance = null;  
  20.     private static FTPClient ftpClient = null;  
  21.     private String cache_dir = "e:/cache/";//用于压缩图片  
  22.     private String server = "192.168.1.13";  
  23.     private int port = 21;  
  24.     private String userName = "ZW-13";  
  25.     private String userPassword = "123";  
  26.   
  27.     public static FTPUtils getInstance(){  
  28.        if(instance == null){  
  29.            instance = new FTPUtils();  
  30.        }  
  31.          
  32.        ftpClient = new FTPClient();  
  33.        return instance;  
  34.     }  
  35.      
  36.    /** 
  37.     * 连接FTP服务器 
  38.     * @return 
  39.     */  
  40.    private boolean connect(){  
  41.         boolean stat = false;  
  42.         try {  
  43.             if(ftpClient.isConnected())  
  44.                 return true;  
  45.             ftpClient.connect(server, port);  
  46.             stat = true;  
  47.         } catch (SocketException e) {  
  48.             stat = false;  
  49.             e.printStackTrace();  
  50.         } catch (IOException e) {  
  51.             stat = false;  
  52.             e.printStackTrace();  
  53.         }  
  54.         return stat;  
  55.    }  
  56.      
  57.    /** 
  58.     * 打开FTP服务器 
  59.     * @return 
  60.     */  
  61.    public boolean open(){  
  62.        if(!connect()){  
  63.            return false;  
  64.        }  
  65.          
  66.        boolean stat = false;  
  67.        try {  
  68.            stat = ftpClient.login(userName, userPassword);  
  69.            // 检测连接是否成功  
  70.            int reply = ftpClient.getReplyCode();  
  71.            if (!FTPReply.isPositiveCompletion(reply)) {  
  72.                close();  
  73.                stat = false;  
  74.            }  
  75.        } catch (IOException e) {  
  76.            stat = false;  
  77.        }  
  78.        return stat;  
  79.    }  
  80.      
  81.      
  82.    /** 
  83.     * 关闭FTP服务器 
  84.     */  
  85.    public void close(){  
  86.        try {  
  87.            if(ftpClient != null){  
  88.                if(ftpClient.isConnected()){    
  89.                    ftpClient.logout();  
  90.                    ftpClient.disconnect();  
  91.                }  
  92.                  
  93.                ftpClient = null;  
  94.            }  
  95.        } catch (IOException e) {  
  96.        }  
  97.    }  
  98.      
  99.      
  100.    /** 
  101.     * 上传文件到FTP服务器 
  102.     * @param filename 
  103.     * @param path 
  104.     * @param input 
  105.     * @return 
  106.     */  
  107.    public boolean upload(String filename,String path,InputStream input){  
  108.        boolean stat = false;  
  109.        try {  
  110.            cd(path);  
  111.            ftpClient.setBufferSize(1024);     
  112.            ftpClient.setControlEncoding("GBK");     
  113.            ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);  
  114.            stat = ftpClient.storeFile(filename, input);             
  115.            input.close();  //关闭输入流  
  116.        } catch (IOException e) {    
  117.              
  118.        }  
  119.        return stat;  
  120.    }  
  121.      
  122.    /** 
  123.     * 上传文件到FTP服务器 
  124.     * @param filename 
  125.     * @param path 
  126.     * @param input 
  127.     * @return 
  128.     */  
  129.    public boolean upload(String filename,String path,String filepath){  
  130.        boolean stat = false;  
  131.        try {  
  132.            cd(path);  
  133.            ftpClient.setBufferSize(1024);     
  134.            ftpClient.setControlEncoding("GBK");     
  135.            ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);  
  136.            FileInputStream input = new FileInputStream(new File(filepath));  
  137.            stat = ftpClient.storeFile(filename, input);             
  138.            input.close();  //关闭输入流  
  139.        } catch (IOException e) {    
  140.              
  141.        }  
  142.        return stat;  
  143.    }  
  144.      
  145.    /** 
  146.     * 上传文件 
  147.     * @param filename 
  148.     * @param path 
  149.     * @param file 
  150.     * @return 
  151.     */  
  152.    public boolean upload(String filename,String path,File file){  
  153.        boolean stat = false;  
  154.        try {  
  155.            cd(path);  
  156.            ftpClient.setBufferSize(1024);     
  157.            ftpClient.setControlEncoding("GBK");     
  158.            ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);  
  159.            FileInputStream input = new FileInputStream(file);  
  160.            stat = ftpClient.storeFile(filename,input);             
  161.            input.close();  //关闭输入流  
  162.        } catch (IOException e) {    
  163.              
  164.        }  
  165.        return stat;  
  166.    }  
  167.      
  168.    /** 
  169.     * 上传图片自动压缩处理 
  170.     * @param path 
  171.     * @param filename 
  172.     * @param input 
  173.     * @param quality 
  174.     * @param maxWidth 
  175.     * @param maxHeight 
  176.     * @return 
  177.     */  
  178.    public boolean uploadImage(String path,String filename,InputStream input,float quality,int maxWidth,int maxHeight){  
  179.        boolean stat = false;  
  180.        try {  
  181.            String suffex = filename.substring(filename.lastIndexOf(".")+1, filename.length());  
  182.            System.out.println(suffex);  
  183.            File imagePath = new File(cache_dir + filename);  
  184.            Thumbnails.of(input).outputQuality(quality).size(maxWidth,maxHeight).toFile(imagePath);  
  185.            input.close();  
  186.              
  187.            if(!imagePath.exists()){  
  188.                return false;  
  189.            }  
  190.              
  191.            cd(path);    
  192.            ftpClient.setBufferSize(1024);     
  193.            ftpClient.setControlEncoding("GBK");     
  194.            ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);  
  195.            FileInputStream input2 = new FileInputStream(imagePath);  
  196.            stat = ftpClient.storeFile(filename,input2);             
  197.            input2.close();//关闭输入流  
  198.            imagePath.delete();  
  199.            stat = true;  
  200.        } catch (IOException e) {    
  201.            e.printStackTrace();  
  202.            stat = false;  
  203.        }  
  204.        return stat;  
  205.    }  
  206.      
  207.      
  208.    /** 
  209.     * 循环切换目录 
  210.     * @param dir 
  211.     * @return 
  212.     */  
  213.    public boolean cd(String dir){  
  214.        boolean stat = true;  
  215.     try {  
  216.            String[] dirs = dir.split("/");  
  217.            if(dirs.length == 0){  
  218.                return ftpClient.changeWorkingDirectory(dir);  
  219.            }  
  220.              
  221.            stat = ftpClient.changeToParentDirectory();  
  222.             for(String dirss : dirs){  
  223.                 stat = stat && ftpClient.changeWorkingDirectory(dirss);  
  224.             }  
  225.               
  226.             stat = true;  
  227.        } catch (IOException e) {  
  228.             stat = false;  
  229.        }  
  230.        return stat;  
  231.    }  
  232.      
  233.    /*** 
  234.     * 创建目录 
  235.     * @param dir 
  236.     * @return 
  237.     */  
  238.    public boolean mkdir(String dir){  
  239.        boolean stat = false;  
  240.        try {  
  241.            ftpClient.changeToParentDirectory();  
  242.            ftpClient.makeDirectory(dir);  
  243.            stat = true;  
  244.        } catch (IOException e) {  
  245.             stat = false;  
  246.        }  
  247.        return stat;  
  248.    }  
  249.      
  250.    /*** 
  251.     * 创建多个层级目录 
  252.     * @param dir dong/zzz/ddd/ewv 
  253.     * @return 
  254.     */  
  255.    public boolean mkdirs(String dir){  
  256.        String[] dirs = dir.split("/");  
  257.        if(dirs.length == 0){  
  258.            return false;  
  259.        }  
  260.        boolean stat = false;  
  261.        try {  
  262.            ftpClient.changeToParentDirectory();  
  263.             for(String dirss : dirs){  
  264.                 ftpClient.makeDirectory(dirss);  
  265.                 ftpClient.changeWorkingDirectory(dirss);  
  266.             }  
  267.               
  268.             ftpClient.changeToParentDirectory();  
  269.             stat = true;  
  270.        } catch (IOException e) {  
  271.             stat = false;  
  272.        }  
  273.        return stat;  
  274.    }  
  275.      
  276.    /** 
  277.     * 删除文件夹 
  278.     * @param pathname 
  279.     * @return 
  280.     */  
  281.    public boolean rmdir(String pathname){  
  282.        try{  
  283.            return ftpClient.removeDirectory(pathname);  
  284.        }catch(Exception e){  
  285.            return false;  
  286.        }  
  287.    }  
  288.      
  289.    /** 
  290.     * 删除文件 
  291.     * @param pathname 
  292.     * @return 
  293.     */  
  294.    public boolean remove(String pathname){  
  295.        boolean stat = false;  
  296.        try{  
  297.            stat = ftpClient.deleteFile(pathname);   
  298.        }catch(Exception e){  
  299.            stat = false;  
  300.        }  
  301.        return stat;  
  302.    }  
  303.      
  304.    /** 
  305.     * 移动文件或文件夹 
  306.     * @param pathname1 
  307.     * @param pathname2 
  308.     * @return 
  309.     */  
  310.    public boolean rename(String pathname1,String pathname2){  
  311.         try {  
  312.             return ftpClient.rename(pathname1, pathname2);  
  313.         } catch (IOException e) {  
  314.             e.printStackTrace();  
  315.             return false;  
  316.         }  
  317.    }  
  318.      
  319. }  

自己整理的


import java.io.File;  
import java.io.FileInputStream;  
import java.io.IOException;  
import java.io.InputStream;  
import java.net.SocketException;  
  
import org.apache.commons.net.ftp.FTPClient;  
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;  
  

public class FTPUtils {
	 private static FTPUtils instance = null;  
	    private static FTPClient ftpClient = null;  
	    private String cache_dir = "e:/cache/";//用于压缩图片  
	    
	    private String server = "10.250.196.142";  
	    private int port = 21;  
	    private String userName = "admin";  
	    private String userPassword = "123456";  
	  
	    public static FTPUtils getInstance(){  
	       if(instance == null){  
	           instance = new FTPUtils();  
	       }  
	         
	       ftpClient = new FTPClient();  
	       return instance;  
	    }  
	     
	   /** 
	    * 连接FTP服务器 
	    * @return 
	    */  
	   private boolean connect(){  
	        boolean stat = false;  
	        try {  
	            if(ftpClient.isConnected())  
	                return true;  
	            ftpClient.connect(server, port);  
	            stat = true;  
	        } catch (SocketException e) {  
	            stat = false;  
	            e.printStackTrace();  
	        } catch (IOException e) {  
	            stat = false;  
	            e.printStackTrace();  
	        }  
	        return stat;  
	   }  
	     
	   /** 
	    * 打开FTP服务器 
	    * @return 
	    */  
	   public boolean open(){  
	       if(!connect()){  
	           return false;  
	       }  
	         
	       boolean stat = false;  
	       try {  
	           stat = ftpClient.login(userName, userPassword);  
	           // 检测连接是否成功  
	           int reply = ftpClient.getReplyCode();  
	           if (!FTPReply.isPositiveCompletion(reply)) {  
	               close();  
	               stat = false;  
	           }  
	       } catch (IOException e) {  
	           stat = false;  
	       }  
	       return stat;  
	   }  
	     
	     
	   /** 
	    * 关闭FTP服务器 
	    */  
	   public void close(){  
	       try {  
	           if(ftpClient != null){  
	               if(ftpClient.isConnected()){    
	                   ftpClient.logout();  
	                   ftpClient.disconnect();  
	               }  
	                 
	               ftpClient = null;  
	           }  
	       } catch (IOException e) {  
	       }  
	   }  
	     
	     
	   /** 
	    * 上传文件到FTP服务器 
	    * @param filename 
	    * @param path 
	    * @param input 
	    * @return 
	    */  
	   public boolean upload(String filename,String path,InputStream input){  
	       boolean stat = false;  
	       try {  
	           cd(path);  
	           ftpClient.setBufferSize(1024);     
	           ftpClient.setControlEncoding("GBK");     
	           ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);  
	           stat = ftpClient.storeFile(filename, input);             
	           input.close();  //关闭输入流  
	       } catch (IOException e) {    
	             
	       }  
	       return stat;  
	   }  
	     
	   /** 
	    * 上传文件到FTP服务器 
	    * @param filename 
	    * @param path 
	    * @param input 
	    * @return 
	    */  
	   public boolean upload(String filename,String path,String filepath){  
	       boolean stat = false;  
	       try {  
	          // cd(path);  
	           ftpClient.setBufferSize(1024);     
	           ftpClient.setControlEncoding("GBK");     
	           ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);  
	           FileInputStream input = new FileInputStream(new File(filepath));  
	           stat = ftpClient.storeFile(filename, input);             
	           input.close();  //关闭输入流  
	       } catch (IOException e) {    
	             
	       }  
	       return stat;  
	   }  
	     
	   /** 
	    * 上传文件 
	    * @param filename 
	    * @param path 
	    * @param file 
	    * @return 
	    */  
	   public boolean upload(String filename,String path,File file){  
	       boolean stat = false;  
	       try {  
	           cd(path);  
	           ftpClient.setBufferSize(1024);     
	           ftpClient.setControlEncoding("GBK");     
	           ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);  
	           FileInputStream input = new FileInputStream(file);  
	           stat = ftpClient.storeFile(filename,input);             
	           input.close();  //关闭输入流  
	       } catch (IOException e) {    
	             
	       }  
	       return stat;  
	   }  
	   
	   public static void main(String[] args) {
			try {
				
				   FTPUtils ftpUtil = getInstance();
				   ftpUtil.connect();
				   ftpUtil.open();
				   FTPFile[] files =  ftpClient.listFiles("2/3");
				   System.out.println(files.length);
				   FTPFile[] files1 =  ftpClient.listFiles("eeee");
				   System.out.println(files1.length);
				   ftpUtil.close();
				  /* FTPUtils ftpUtil = getInstance();
				   ftpUtil.connect();
				   ftpUtil.open();
				   ftpUtil.mkdirs("1/2/3/4");
				   ftpUtil.close();
				   
				
				   
				   ftpUtil = getInstance();
				   ftpUtil.connect();
				   ftpUtil.open();
				   ftpUtil.upload("1/2/3/4/1.log", "", "d:/web.log");
				   ftpUtil.close();*/
				/*   
				
				   FTPUtils ftpUtil = getInstance();
				   ftpUtil.connect();
				   ftpUtil.open();
				   ftpUtil.mkdirs("2/3/4");
				   ftpUtil.upload("1.log", "2/3/4", "d:/web.log");
				   ftpUtil.close();*/
				
			} catch (Exception e) {
				// TODO: handle exception
				e.printStackTrace();
			}
	   }
	     
	   /** 
	    * 上传图片自动压缩处理 
	    * @param path 
	    * @param filename 
	    * @param input 
	    * @param quality 
	    * @param maxWidth 
	    * @param maxHeight 
	    * @return 
	    */  
	 /*  public boolean uploadImage(String path,String filename,InputStream input,float quality,int maxWidth,int maxHeight){  
	       boolean stat = false;  
	       try {  
	           String suffex = filename.substring(filename.lastIndexOf(".")+1, filename.length());  
	           System.out.println(suffex);  
	           File imagePath = new File(cache_dir + filename);  
	           Thumbnails.of(input).outputQuality(quality).size(maxWidth,maxHeight).toFile(imagePath);  
	           input.close();  
	             
	           if(!imagePath.exists()){  
	               return false;  
	           }  
	             
	           cd(path);    
	           ftpClient.setBufferSize(1024);     
	           ftpClient.setControlEncoding("GBK");     
	           ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);  
	           FileInputStream input2 = new FileInputStream(imagePath);  
	           stat = ftpClient.storeFile(filename,input2);             
	           input2.close();//关闭输入流  
	           imagePath.delete();  
	           stat = true;  
	       } catch (IOException e) {    
	           e.printStackTrace();  
	           stat = false;  
	       }  
	       return stat;  
	   }  
	     */
	     
	   /** 
	    * 循环切换目录 
	    * @param dir 
	    * @return 
	    */  
	   public boolean cd(String dir){  
	       boolean stat = true;  
	    try {  
	           String[] dirs = dir.split("/");  
	           if(dirs.length == 0){  
	               return ftpClient.changeWorkingDirectory(dir);  
	           }  
	             
	           stat = ftpClient.changeToParentDirectory();  
	           for(String dirss : dirs){  
	               stat = stat && ftpClient.changeWorkingDirectory(dirss);  
	           }  
	              
	            stat = true;  
	       } catch (IOException e) {  
	            stat = false;  
	       }  
	       return stat;  
	   }  
	     
	   /*** 
	    * 创建目录 
	    * @param dir 
	    * @return 
	    */  
	   public boolean mkdir(String dir){  
	       boolean stat = false;  
	       try {  
	           ftpClient.changeToParentDirectory();  
	           ftpClient.makeDirectory(dir);  
	           stat = true;  
	       } catch (IOException e) {  
	            stat = false;  
	       }  
	       return stat;  
	   }  
	     
	   /*** 
	    * 创建多个层级目录 
	    * @param dir dong/zzz/ddd/ewv 
	    * @return 
	    */  
	   public boolean mkdirs(String dir){  
	       String[] dirs = dir.split("/");  
	       if(dirs.length == 0){  
	           return false;  
	       }  
	       boolean stat = false;  
	       try {  
	           ftpClient.changeToParentDirectory();  
	            for(String dirss : dirs){  
	                ftpClient.makeDirectory(dirss);  
	                ftpClient.changeWorkingDirectory(dirss);  
	            }  
	              
	            ftpClient.changeToParentDirectory();  
	            stat = true;  
	       } catch (IOException e) {  
	            stat = false;  
	       }  
	       return stat;  
	   }  
	     
	   /** 
	    * 删除文件夹 
	    * @param pathname 
	    * @return 
	    */  
	   public boolean rmdir(String pathname){  
	       try{  
	           return ftpClient.removeDirectory(pathname);  
	       }catch(Exception e){  
	           return false;  
	       }  
	   }  
	     
	   /** 
	    * 删除文件 
	    * @param pathname 
	    * @return 
	    */  
	   public boolean remove(String pathname){  
	       boolean stat = false;  
	       try{  
	           stat = ftpClient.deleteFile(pathname);   
	       }catch(Exception e){  
	           stat = false;  
	       }  
	       return stat;  
	   }  
	     
	   /** 
	    * 移动文件或文件夹 
	    * @param pathname1 
	    * @param pathname2 
	    * @return 
	    */  
	   public boolean rename(String pathname1,String pathname2){  
	        try {  
	            return ftpClient.rename(pathname1, pathname2);  
	        } catch (IOException e) {  
	            e.printStackTrace();  
	            return false;  
	        }  
	   }  
	

}



0

貌似之前我的认识有点问题…… 
FTP协议里面,规定文件名编码为iso-8859-1,所以只能建转码以后的目录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值