gpt4 book ai didi

java - 通过 ftp 发送数据库 - 获取不同的文件

转载 作者:太空宇宙 更新时间:2023-11-03 11:20:03 25 4
gpt4 key购买 nike

我目前正在使用此代码通过 ftp 发送数据库(使用 apache commons)

File file = getDatabasePath("database");

FTPClient ftp = new FTPClient();

try {
ftp.connect(InetAddress.getByName(domain));
ftp.login(username, password);
ftp.setFileType(FTP.BINARY_FILE_TYPE);
FileInputStream is = new FileInputStream(file);
BufferedInputStream buffIn = new BufferedInputStream(is);
ftp.enterLocalPassiveMode();
ftp.storeFile("database", buffIn);
buffIn.close();
ftp.logout();
ftp.disconnect();
} catch (Exception e) {
// TODO: handle exception
}

我用它来发送一个文本文件并且它有效。但是,我已经用我的数据库试过了,一个相同大小的文件被放在服务器上,但是当我打开它时,SQLite 浏览器没有显示任何内容。它适用于非常小的数据库,但一旦数据库变大,我就会遇到这个问题。

我想知道这是否与缓冲区大小有关?谁能阐明为什么会发生这种情况?

谢谢

最佳答案

您发布的代码不适用于不适合缓冲输入流缓冲区的文件。您需要做的是从输入流中重复读取直到结束:

ftp.enterLocalPassiveMode();
ftp.storeFile("database", buffIn);
byte[] buffer = new byte[8192];
OutputStream os = ftp.storeFileStream("database");
int readCount = 0;
while ((readCount = buffIn.read(buffer)) > 0) {
os.write(buffer, 0, readCount);
}
os.close();
buffIn.close();

重要的是使用 storeFileStream() 而不是 storeFile()。此外,正如评论者所建议的,您需要检查服务器的返回码并进行适当的错误处理。

关于java - 通过 ftp 发送数据库 - 获取不同的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9956161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com