2012-03-01 17 views
1

Javaアプリケーションからファイル(config.zip.zipとartikels.csv)をFTPサーバーに転送しようとしていますが、プログラムは動作しますが、ファイルは転送されますが、フォルダに移動するとファイルが壊れている、ファイルサイズが元のファイルサイズより小さいです。 artikels.csvファイルの行番号がartikels.csvよりも少なくなっていますが、zipファイルを完全に開くことはできません。どうして?そして私はこれをどのように修正できますか?なぜjava ftpがファイルをサーバにアップロードするのですか?

import org.apache.commons.io.FilenameUtils; 
import org.apache.commons.net.ftp.FTP; 
import org.apache.commons.net.ftp.FTPClient; 
import org.apache.commons.net.ftp.FTPFile; 

public static void upload(List<String> files){ 
    FTPClient client = new FTPClient(); 
    FileInputStream fis = null; 
    try { 
     client.connect(ftpServer); 
     client.login(username, password); 
     client.setFileType(FTP.BINARY_FILE_TYPE); 

     for(String filename:files){ 
      fis = new FileInputStream(filename); 
      boolean uploadOk = client.storeFile(FilenameUtils.getName(filename), fis); 
      System.out.println("Uploading status is: "+uploadOk); 
     } 
      client.completePendingCommand(); 
      client.logout(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     try { 
      if (fis != null) { 
       fis.close(); 
      } 
      client.disconnect(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

答えて

1

これは実行しているコードと同じですか? completePending Command()とlogout()は、ファイル反復ループ内にあると思われます。あなたは次のようなものを持ってはいけませんか?

... 

    client.connect(ftpServer); 
    client.login(username, password); 
    client.setFileType(FTP.BINARY_FILE_TYPE); 
    for(String filename:files){ 
     fis = new FileInputStream(filename); 
     String s = FilenameUtils.getName(filename); 
     System.out.println(s); 
     boolean uploadOk = client.storeFile(s, fis); 
     System.out.println("Uploading status is: "+uploadOk); 
    } 
    client.completePendingCommand(); 
    client.logout(); 
    ... 
+0

uploadOKに「true」の値を戻していますか? – GeoGriffin

+0

はい、私は真実を得て、私はファイルが成功してアップロードされて参照してください。 – itro

0

ループ内にfis.close()を追加する必要があります。

多くのファイルをループしているので、それぞれの後にFileInputStreamを閉じる必要があります。