2012-04-23 29 views
0

私がやっているのは、単純なテキストファイルを、Javaコードを使用してFTPサーバーにアップロードしてエラーが発生することです。私はそれを働かせるように努力していますが、それをすることはできません。以下はコードです。FTPサーバーにファイルをアップロード中に例外が発生する

File file = new File("testFile.txt"); 
    FileOutputStream fo = new FileOutputStream(file); 
    PrintStream ps = new PrintStream(fo); 
    ps.println("BLA"); 
    ps.close();`enter code here` 
    fo.close(); 
uploadFile(file,file.getName()); 



public void upload(String ftpServer, String user, String password, 
    String fileName, FileInputStream is) throws MalformedURLException, 
    IOException 

      { 

     log("inside upload..........."); 
     if (ftpServer != null && fileName != null && is != null) 
     { 
      StringBuffer sb = new StringBuffer("ftp://"); 
      // check for authentication else assume its anonymous access. 
      if (user != null && password != null) 
      { 
       sb.append(user); 
       sb.append(':'); 
       sb.append(password); 
       sb.append('@'); 
      } 
      sb.append(ftpServer); 
      sb.append('/'); 
      sb.append(fileName); 
      /* 
      * type ==> a=ASCII mode, i=image (binary) mode, d= file directory 
      * listing 
      */ 
      sb.append(";type=i"); 

      BufferedInputStream bis = null; 
      BufferedOutputStream bos = null; 
      try 
      { 
       URL url = new URL(sb.toString()); 
       URLConnection urlc = url.openConnection(); 

       log("urlc::1 "+urlc); 

       bos = new BufferedOutputStream(urlc.getOutputStream()); 
       log("bos:: "+bos); 

       bis = new BufferedInputStream(is); 

       int i; 
       // read byte by byte until end of stream 
       while ((i = bis.read()) != -1) 
       { 
        log("i"+i); 
        bos.write(i); 
       } 
      } 
      finally 
      { 
       if (bis != null) 
        try 
       { 
         bis.close(); 
       } 
       catch (IOException ioe) 
       { 
        ioe.printStackTrace(); 
       } 
       if (bos != null) 
        try 
       { 
         bos.close(); 
       } 
       catch (IOException ioe) 
       { 
        ioe.printStackTrace(); 
       } 
      } 
     } 
     else 
     { 
      log("Input not available."); 
     } 
      } 

詳細については、私はjava.netのインポートを使用しています。

私は取得していますエラー:

Exception e is :: java.io.IOException: illegal filename for a PUT 
    at sun.net.www.protocol.ftp.FtpURLConnection.getOutputStream(Unknown Source) 
    at ToolFileUpload.upload(ToolFileUpload.java:72) 
    at APInterfaceTool.uploadFile(APInterfaceTool.java:861) 
    at APInterfaceTool.createInvoiceTextFile(APInterfaceTool.java:613) 
    at APInterfaceTool.generateOutBoundExtract(APInterfaceTool.java:426) 
+0

'java.io.IOException:PUTの不正なファイル名' は、ファイルがヌルか名前の長さが '0'の場合に発生します。これらの行でデバッグします。 – Dilawar

+1

問題はFTPサーバーにあることがわかりました。私は他のFTPサーバーで同じコードを試して、うまく動作します。あなたの助けをよろしくお願いします。 –

答えて

0

例外をスローFtpURLConnection.getOutputStreamのコードは次のとおりです。あなたが見ることができるように

decodePath(url.getPath()); 
if (filename == null || filename.length() == 0) { 
    throw new IOException("illegal filename for a PUT"); 
} 

、問題があることが解析されたfilenameコンポーネントのURLが空または不足しています。

おそらく、uploadメソッドに不適切なパラメータを指定している可能性があります。残念ながら、あなたはそのメソッドを呼び出すコードを含めていないので、私はそれ以上は行くことができません。

+0

ログからファイル名がヌルでもファイルの長さもゼロではないことを確認しました。また、私は上記の方法全体を入れました。アップロードという名前のメソッドです。 –

+0

私はFTPサーバーにファイルをアップロードするために、このスタンドアロンのプログラムを試しています。コードは正常に動作しますが、ファイルはFTPで作成されません –

+0

ご協力いただきありがとうございます。私は同じコードが他のFTPサーバー上でうまく動作するので、問題はFTPサーバーであることがわかりました。 :D –

0

関数を呼び出すときに、渡すパラメータFileInputStream isがnullでないことを確認してください。

+0

はい、nullでないことを確認しました。何が問題なの? –

+0

コードが既に存在するファイルを作成しようとしている必要があります。私は[this](http://www.coderanch.com/t/277808/Streams/java/Copy-file-window-machine-Linux)が役立つかもしれないと思います。 –

+0

問題はFTPサーバーにあることがわかりました。私は他のFTPサーバーで同じコードを試して、うまく動作します。皆さん、お世話になりました。 –

関連する問題