java - 如何使用java上传多个文件

标签 java file ftp

我希望有人能帮助我(再次)。

我有大量的 smmll 文件(超过 4000 个),每个文件只有几 K。 我用 java 编写了一个 FTP 程序,它将单独传输每个文件,但它需要很长时间。此外,握手开销似乎使问题变得更糟。

我希望能够做的是打开 FTP 连接发送所有文件然后再次关闭它。

我知道这在 FTP 中是可能的,但我不知道如何在 java 中实现它。

我目前将文件名放在一个数组中,因此解析它们没有问题。我尝试调用以下类并将文件名传递给它,但几个小时后它仍然每秒移动大约 1 个文件。

    package website;

    import java.io.BufferedOutputStream;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.URLConnection;

    public class ftpUpload {

public ftpUpload(String target, String savename, String localFilePath) {

    URL url;
    try {
        url = new URL(target + savename + ";type=i");

        URLConnection con = url.openConnection();
        BufferedOutputStream out = 
            new BufferedOutputStream(con.getOutputStream());
        FileInputStream in = 
            new FileInputStream(localFilePath + savename);

        int i = 0;
        byte[] bytesIn = new byte[1024];
        while ((i = in.read(bytesIn)) >= 0) {
            out.write(bytesIn, 0, i);
        }
        out.close();
        in.close();

    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

}

    }

有没有办法用 ftp 站点的用户名和密码打开连接, 然后将文件发送给它 最后关闭连接?

在我看来,这比创建多个线程来同时发送文件更容易。

收到的任何建议。

保罗

最佳答案

我不认为使用 URLConnection 在一个 session 中发送多个文件是可能的,这意味着您需要为每个文件打开和关闭 session 的开销。

来自 commons net 的 FTPClient确实支持一个 session 中的多个操作。例如(省略异常处理):

FTPClient ftp = new FTPClient();
ftp.connect("ftp.example.com");
ftp.login("admin", "secret");
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);

for(File file : files) {
    InputStream in = new FileInputStream(file);
    ftp.storeFile(file.getName(), in);
    in.close();
}

ftp.disconnect();

这应该有所帮助。

如果您仍然需要更好的性能,我认为除了使用多线程之外别无其他选择。

关于java - 如何使用java上传多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13001405/

相关文章:

java - 使用 Maven 构建 spring-boot 项目时将文件复制到 jar 根目录

java - 奇怪的选择排序行为

c - 在 C 中的行尾后读取问题

linux - 在亚马逊云服务器上设置 FTP

java - Apache Commons Net,Android 导入不起作用

java - Ehcache 自动生成 key 和@Cacheable spring 注解

java - 对象和数组列表

java - 如何从 Java 编写的文件中读取 C 语言的数据(二进制或文本)?

Java写入目录只会创建文件

php - 通过 FTP 上传时文件修改日期/时间发生变化