Java实现对ftp的读写文件

这里仅仅是对ftp工具类的简单使用,很多东西还不是很了解。当然学以致用,先用到这里吧。

 

[java] view plain copy
 
 print?
  1. public class FtpTest {  
  2.     /** 
  3.      * 向ftp写文件(数据) 
  4.      */  
  5.     @Test  
  6.     public void uploadFile() {  
  7.    
  8.         // 要写入的文件内容  
  9.         String fileContent = "hello world,你好世界";  
  10.         // ftp登录用户名  
  11.         String userName = "admin";  
  12.         // ftp登录密码  
  13.         String userPassword = "xxxx";  
  14.         // ftp地址  
  15.         String server = "127.0.0.1";//直接ip地址  
  16.         // 创建的文件  
  17.         String fileName = "ftp.txt";  
  18.         // 指定写入的目录  
  19.         String path = "wd";  
  20.    
  21.         FTPClient ftpClient = new FTPClient();  
  22.         try {  
  23.             InputStream is = null;  
  24.             // 1.输入流  
  25.             is = new ByteArrayInputStream(fileContent.getBytes());  
  26.             // 2.连接服务器  
  27.             ftpClient.connect(server);  
  28.             // 3.登录ftp  
  29.             ftpClient.login(userName, userPassword);  
  30.             // 4.指定写入的目录  
  31.             ftpClient.changeWorkingDirectory(path);  
  32.             // 5.写操作  
  33.             ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);  
  34.             ftpClient.storeFile(new String(fileName.getBytes("utf-8"),  
  35.                     "iso-8859-1"), is);  
  36.             is.close();  
  37.         } catch (Exception e) {  
  38.             e.printStackTrace();  
  39.         } finally {  
  40.             if (ftpClient.isConnected()) {  
  41.                 try {  
  42.                     ftpClient.disconnect();  
  43.                 } catch (Exception e) {  
  44.                     e.printStackTrace();  
  45.                 }  
  46.             }  
  47.         }  
  48.     }  
  49.       
  50.     /** 
  51.      * ftp下载数据 
  52.      */  
  53.     @Test  
  54.     public void downFile() {  
  55.         // ftp登录用户名  
  56.         String userName = "admin";  
  57.         // ftp登录密码  
  58.         String userPassword = "xxxx";  
  59.         // ftp地址:直接IP地址  
  60.         String server = "xxxx";  
  61.         // 创建的文件  
  62.         String fileName = "ftp.txt";  
  63.         // 指定写入的目录  
  64.         String path = "wd";  
  65.         // 指定本地写入文件  
  66.         String localPath="D:\\";  
  67.           
  68.         FTPClient ftp = new FTPClient();  
  69.         try {  
  70.             int reply;  
  71.             //1.连接服务器  
  72.             ftp.connect(server);  
  73.             //2.登录服务器 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器  
  74.             ftp.login(userName, userPassword);  
  75.             //3.判断登陆是否成功  
  76.             reply = ftp.getReplyCode();  
  77.             if (!FTPReply.isPositiveCompletion(reply)) {  
  78.                 ftp.disconnect();  
  79.             }  
  80.             //4.指定要下载的目录  
  81.             ftp.changeWorkingDirectory(path);// 转移到FTP服务器目录  
  82.             //5.遍历下载的目录  
  83.             FTPFile[] fs = ftp.listFiles();  
  84.             for (FTPFile ff : fs) {  
  85.                 //解决中文乱码问题,两次解码  
  86.                 byte[] bytes=ff.getName().getBytes("iso-8859-1");  
  87.                 String fn=new String(bytes,"utf8");  
  88.                 if (fn.equals(fileName)) {  
  89.                     //6.写操作,将其写入到本地文件中  
  90.                     File localFile = new File(localPath + ff.getName());  
  91.                     OutputStream is = new FileOutputStream(localFile);  
  92.                     ftp.retrieveFile(ff.getName(), is);  
  93.                     is.close();  
  94.                 }  
  95.             }  
  96.             ftp.logout();  
  97.         } catch (IOException e) {  
  98.             e.printStackTrace();  
  99.         } finally {  
  100.             if (ftp.isConnected()) {  
  101.                 try {  
  102.                     ftp.disconnect();  
  103.                 } catch (IOException ioe) {  
  104.                 }  
  105.             }  
  106.         }  
  107.     }  
  108.  }  
  109.    
 

很多知识点是相互联系的,希望以后的例子中能够结合更多的知识点进行实例编写,这样也有助于知识的巩固。

 

下面是我自己项目中用到的代码

 /**
         * 下载pdf文件
         */
        public String downLoadPdf(String url,String contNo,String localPdfName){
            String newUrl="";
             String pathUrl="172.18.100.165"; //FTP服务器hostname 
             int port=21;//FTP服务器端口 
             String username="shwasextt20\\ftp"; //FTP登录账号 
             String password="qwerty1!"; //FTP登录密码 
             String remotePath="/Imagedownload";//FTP服务器上的相对路径  
             String fileName;//要下载的文件名 
           //  String localPath="I:\\2015\\workspace\\workspace_newng\\wj\\WebContent\\wwwroot\\ng\\downLoad";//下载后保存到本地的路径
               String localPath="C:\\project\\b2c\\cms.ear\\cms.war\\wwwroot\\ng\\downLoad";//下载后保存到本地的路径
           //  String localPath="C:\\B2C\\cms.ear\\cms.war\\wwwroot\\ng\\downLoad";//下载后保存到本地的路径
             String localName = "";
             
             Date date = new Date();
             SimpleDateFormat dr = new SimpleDateFormat("yyyyMMddHHmmss");
             
             //重命名(保单号+时间)
             localName = localPdfName;
             
             if(!"".equals(url) && url !=null){
               //  String backUrl = "ftp://172.18.100.165/Imagedownload/0180050037-个险合同-电子合同-201537071208(66e735db-8ddf-4e0e-b70c-339544ff630b).PDF";
                 fileName = url.split("/")[4];
                 pathUrl = url.split("/")[2];
                 
                 //生产环境ftp判断
                 if("172.16.252.100".equals(pathUrl)){
                     username = "shwasextp20\\ftp";
                 }else if("172.16.252.110".equals(pathUrl)){
                     username = "shwasextp21\\ftp";
                 }else{
                     username = "shwasextt20\\ftp";
                 }
                 
                 FTPClient ftp = new FTPClient();
                 try {
                    ftp.connect(pathUrl,port);
                    ftp.login(username,password);
                    System.out.println(ftp.isConnected());
                    ftp.enterLocalPassiveMode();
                    ftp.setControlEncoding("GBK");
                    ftp.setFileType(ftp.BINARY_FILE_TYPE);
                    ftp.changeWorkingDirectory(remotePath);
                    OutputStream outputStream = null;
                    FTPFile[] fs = ftp.listFiles();
                    for (int i = 0; i < fs.length; i++) { 
                        FTPFile ff = fs[i]; 
                        if (ff.getName().equals(fileName)) { 
                            InputStream in = ftp.retrieveFileStream(new String(ff.getName().getBytes("GBK"), "ISO-8859-1")); 
                             int len = 0;  
                                long size = 0;  
                                byte[] bt = new byte[1024];  
                                outputStream=new BufferedOutputStream(new FileOutputStream(localPath+"\\"+localName+".pdf"));
                                while ((len = in.read(bt)) > 0) {  
              
                                    outputStream.write(bt, 0, len); // outputStream.flush();  
                                    size = size + len;  
              
                                  //  System.out.println(fileName + "已xiazai :" + size);  
              
                                } 
                                newUrl = "cms/wwwroot/ng/downLoad/"+localName+".pdf";
                                outputStream.flush();  
                        }
                        
                    }
                    outputStream.close();
                    ftp.logout();
                } catch (SocketException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
             }
            return newUrl;
            
        }

 

posted @ 2017-05-24 15:29  请叫我刀刀  阅读(14240)  评论(1编辑  收藏  举报