Java實現對ftp的讀寫文件

這裏僅僅是對ftp工具類的簡單使用,不少東西還不是很瞭解。固然學以至用,先用到這裏吧。java

 

[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;
            
        }
相關文章
相關標籤/搜索