2012-03-01 3 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에서 '실제'값을 되 찾으시겠습니까? – GeoGriffin

+0

예, 사실입니다. 파일이 성공적으로 업로드되었음을 알 수 있습니다. – itro

0

루프 내에 fis.close()을 추가해야합니다.

많은 파일을 반복하고 있으므로 각 후마다 FileInputStream을 닫아야합니다.