我要啦免费统计

          微藍領(lǐng)域

          我的學習檔案館
          posts - 19, comments - 57, trackbacks - 0, articles - 57
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          java實現(xiàn)FTP文件上傳出現(xiàn)的問題

          Posted on 2007-08-23 11:33 hilor 閱讀(6737) 評論(3)  編輯  收藏 所屬分類: J2EE
          昨天用JAVA寫了一個實現(xiàn)FTP文件上傳功能的類(是通過sun.net.ftp包實現(xiàn)的,此包為SUN的私有類包,所以官方?jīng)]有提供相關(guān)API文檔),然后進行了簡單的測試。
          具體類代碼如下(此類的部分方法還未完善):
          package com.tools;
          import java.io.FileInputStream;
          import java.io.IOException;
          import sun.net.TelnetOutputStream;
          import sun.net.ftp.FtpClient;
          /**
           * @author simplelife 
           * @version 1.0
           *
           */
          public class FtpTool{
           
           private FtpClient ftp; 
           
           /**
            * 構(gòu)造方法,新建一個FtpClient對象,并打開FTP服務(wù)器
            * @param host FTP服務(wù)器地址;port FTP服務(wù)端口
            *
            */
           public FtpTool(String host,int port)throws IOException{
            ftp = new FtpClient();
            ftp.openServer(host, port);
           }
           
           /**
            * 登陸方法,通過用戶名密碼登陸到指定的FTP服務(wù)器上去,并返回歡迎信息
            * @param username FTP用戶名;password 密碼
            *
            */
           public String login(String username,String password)throws IOException{
            this.ftp.login(username, password);
            return this.ftp.welcomeMsg;
           }
           
           /**
            * 此方法用來上傳文件。
            * @param pathname 本地路徑;filename 要上傳的文件名稱
            *
            */
           public void upload(String pathname,String filename)throws IOException{
              if(!this.ftp.serverIsOpen()){
               System.out.println("服務(wù)器連接不可用!");
              }
              this.ftp.binary();
              TelnetOutputStream os = null;
              FileInputStream is = null;
              try {
               //用ftp上傳后的文件名與原文件名相同,同為filename變量內(nèi)容
               os = this.ftp.put(filename);
               java.io.File file_in = new java.io.File(pathname+"\\"+filename);
               if (file_in.length()==0) {
                System.out.println("上傳文件為空!");
               }
               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();
               }
              }
              System.out.println("上傳文件成功!");
              this.ftp.ascii();
           }
           
           /**
            * 此方法用來下載文件。
            * @param pathname 本地路徑;filename 要上傳的文件名稱
            *
            */
           public void download(String pathname,String filename)throws IOException{
            
           }
           
           
           public static void main(String[] args){
            try{
             FtpTool ftpt = new FtpTool("128.14.9.13",21);
             String welstr = ftpt.login("xxxx", "xxxxxxxx");
             System.out.println(welstr);
             ftpt.upload("C:", "111.txt");
            }catch(IOException ioe){
             ioe.printStackTrace();
            }
           }
          }
          在測試過程中拋出一個異常,具體信息如下:
          User at logged in.
           
          sun.net.ftp.FtpProtocolException: STOR 111.txt:425 Can't build data connection: Connection timed out.
           at sun.net.ftp.FtpClient.openDataConnection(Unknown Source)
           at sun.net.ftp.FtpClient.put(Unknown Source)
           at com.tools.FtpTool.upload(FtpTool.java:56)
           at com.tools.FtpTool.main(FtpTool.java:94)
          拋出此異常的具體表現(xiàn)為:在FTP服務(wù)器上已經(jīng)創(chuàng)建了該文件,但文件大小為0。在網(wǎng)上搜索相關(guān)異常描述也很少,經(jīng)過仔細分析發(fā)現(xiàn),此問題與FTP客戶端防火墻有關(guān)。然后我關(guān)閉防火墻軟件,再進行測試,一切OK!
           
          在網(wǎng)上也發(fā)現(xiàn)另一個常見異常,我將它重現(xiàn)并做說明。其主要原因是很多FTP服務(wù)沒有使用默認端口,在代碼實現(xiàn)中,連接端口不正確所導致異常出現(xiàn)的。
          sun.net.ftp.FtpProtocolException: Welcome message: ??$
           at sun.net.ftp.FtpClient.openServer(Unknown Source)
           at com.tools.FtpTool.<init>(FtpTool.java:29)
           at com.tools.FtpTool.main(FtpTool.java:91)
           
          第三種異常就是由于FTP服務(wù)器端的FTP服務(wù)沒有開啟,連接被拒絕所導致的。具體異常如下:
          java.net.ConnectException: Connection refused: connect
           at java.net.PlainSocketImpl.socketConnect(Native Method)
           at java.net.PlainSocketImpl.doConnect(Unknown Source)
           at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
           at java.net.PlainSocketImpl.connect(Unknown Source)
           
           
                 最后,如果大家遇到什么新的相關(guān)問題,可以在這里留言,我們來共同解決問題、學習提高。

          評論

          # re: java實現(xiàn)FTP文件上傳出現(xiàn)的問題  回復  更多評論   

          2009-03-02 09:15 by shiqy
          我也用sun.net.ftp包實現(xiàn)的ftp實現(xiàn)上傳,但是我上傳的文件都變成空的,沒有報錯施什么回事????我可以手動的上傳沒問題,上傳的文件非空。

          # re: java實現(xiàn)FTP文件上傳出現(xiàn)的問題[未登錄]  回復  更多評論   

          2009-07-31 16:07 by sam
          sun.net.ftp.FtpProtocolException: Welcome message:
          at sun.net.ftp.FtpClient.openServer(FtpClient.java:490)
          at com.camelot.transdata.service.impl.FtpServiceImpl.connectServer(FtpServiceImpl.java:50)
          at com.camelot.transdata.controller.TransdataController.transDataFromSAP(TransdataController.java:102)
          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
          at java.lang.reflect.Method.invoke(Method.java:597)
          at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)
          at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.jav
          182)

          # re: java實現(xiàn)FTP文件上傳出現(xiàn)的問題  回復  更多評論   

          2009-10-25 16:39 by 啊鎮(zhèn)
          我想請問一下,java實現(xiàn)ftp文件上傳的,在文件上傳完以后,要如何判斷文件上傳成功了還是失敗了?還有,如何在客戶端獲取到上傳到服務(wù)端的文件的大小的?他們之間是怎樣進行通信的?
          主站蜘蛛池模板: 犍为县| 荔浦县| 金门县| 林甸县| 水城县| 罗定市| 内乡县| 临潭县| 府谷县| 北碚区| 石棉县| 宁安市| 屯门区| 南溪县| 长汀县| 维西| 五华县| 瓦房店市| 平谷区| 漳州市| 渭南市| 北辰区| 浦城县| 高唐县| 屯门区| 保德县| 郎溪县| 新乡市| 工布江达县| 如皋市| 炎陵县| 醴陵市| 襄樊市| 崇阳县| 永嘉县| 正阳县| 汤原县| 西贡区| 易门县| 泗阳县| 九龙城区|