1

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

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();
        }
    }
}
4

2 に答える 2

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();
    ...
于 2012-03-01T14:12:44.743 に答える
0

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

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

于 2015-09-27T03:27:55.200 に答える