zoukankan      html  css  js  c++  java
  • 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;
                
            }
  • 相关阅读:
    942. 增减字符串匹配
    116. 填充每个节点的下一个右侧节点指针
    剑指 Offer 35. 复杂链表的复制
    实验排序
    543. 二叉树的直径
    面试题 08.08. 有重复字符串的排列组合
    微信开发者工具
    打印机链接
    图片上下左右居中
    学习 视频网站
  • 原文地址:https://www.cnblogs.com/zqyanywn/p/6899174.html
Copyright © 2011-2022 走看看