gpt4 book ai didi

java - 从 FTPS 服务器检索文件时出现问题

转载 作者:行者123 更新时间:2023-12-01 16:01:57 24 4
gpt4 key购买 nike

我正在从事应用程序开发工作。在该应用程序上,我正在执行文件存储、检索和删除操作。为了识别服务器上的文件,我使用索引( HashMap 文件)文件。每次执行上传操作时,我都会更新“index”文件并将“index”文件与其他上传文件一起上传到服务器上。

为了首先执行删除操作,我检索“索引”文件,并根据索引从服务器删除文件,更新“索引”文件后,我再次在服务器上上传“索引”文件。

我能够成功执行文件上传操作,但在执行删除操作时,当我尝试检索“index”文件时,我收到“java.io.EOFException”异常。

我正在编写以下代码来从 FTPS 服务器下载“index”文件

//download index file
if (service.retrFile("INDEX", "") == service.OK) {
try {
ObjectInputStream objIn = new ObjectInputStream(new FileInputStream("INDEX"));
try {
Map<String, FileData> filesUploaded = (HashMap<String, FileData>) objIn.readObject();

} catch (ClassNotFoundException ex) {
ex.printStackTrace();
}
objIn.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}

如果成功连接到 FTPS 服务器,“service.ok”将返回“0”“FileData”包含有关文件(属性)的信息。

我在执行上传操作时使用的代码相同。在那里它工作正常,没有异常(exception)。但是当我检索“index”文件时执行删除操作时,我在声明中遇到异常:

Map filesUploaded = (HashMap) objIn.readObject();

异常(exception)是:

严重:空

java.io.EOFException
at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2298)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2767)
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:798)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:298)
at com.pixelvault.gui.DeleteServerFilesDialog.startDeleting(DeleteServerFilesDialog.java:447)

执行相应操作后,检查FTPS服务器连接是否正常关闭。

我没有明白我做错的地方。

请给我您宝贵的建议。我感谢您的所有建议,这些建议将帮助我克服这个问题。

<小时/>

我正在使用 org.apache.commons.net.ftp,“retrFile”是我创建的用于从服务器检索文件的方法。

这是“retrFile”的代码

FTPSClient ftp;

public int retrFile(字符串文件名, 字符串保存路径) { 如果(!连接){ 返回错误; }

    FileOutputStream fout = null;
InputStream bin = null;
try {
ftp.enterLocalPassiveMode();
fout = new FileOutputStream(savePath + filename);
bin = ftp.retrieveFileStream(filename);
if (bin == null) {
fout.close();
return ERR;
}
byte[] b = new byte[ftp.getBufferSize()];
int bytesRead = 0;
while ((bytesRead = bin.read(b, 0, b.length)) != -1) {
fout.write(b, 0, bytesRead);
}
ftp.completePendingCommand();
fout.close();
} catch (FTPConnectionClosedException ex) {
ex.printStackTrace();
connected = false;
return NOT_CONNECTED;
} catch (IOException ex) {
ex.printStackTrace();
return ERR;
} finally {
try {
fout.close();
} catch (IOException ex) {
ex.printStackTrace();
return ERR;
}
try {
if (bin != null) {
bin.close();
}
} catch (IOException ex) {
ex.printStackTrace();

return ERR;
}
}
return OK;
}

最佳答案

您确定 INDEX 文件已正确下载吗?

当应用程序关闭时它是否存在于文件系统中?

您使用的是什么 FTP 库?我只知道 Apache 的 commons.net,并且不认识“retrFile”文件方法。是否可以线程化,使得执行readObject语句时文件没有完全下载?

关于java - 从 FTPS 服务器检索文件时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3634273/

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