我希望有人能帮助我(再次)。
我有大量的 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/