Je travaille dans le développement d'une application. Sur cette application, j'effectue des opérations de stockage, de récupération et de suppression de fichiers. Pour identifier les fichiers sur le serveur, j'utilise un fichier d'index (fichier de hachage). chaque fois que j'effectue une opération de téléchargement, je mets à jour le fichier "index" et charge le fichier "index" sur le serveur avec d'autres fichiers de téléchargement. Pour effectuer une opération de suppression, je récupère d'abord le fichier "index" et, en fonction de l'index, je supprime les fichiers du serveur et après la mise à jour du fichier "index" je télécharge à nouveau le fichier "index" sur le serveur.Un problème lors de la récupération du fichier à partir du serveur FTPS
Je suis en mesure d'effectuer une opération de téléchargement de fichiers avec succès, mais lors d'une opération de suppression, j'obtiens une exception "java.io.EOFException", lorsque j'essaie de récupérer le fichier "index".
je suis en train d'écrire le code ci-dessous pour télécharger le fichier « index » du serveur FTPS
//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();
}
}
Où « service.ok » retourne « 0 » si elle est correctement connecté au serveur FTPS et « FileData » contient des informations A propos du fichier (attributs).
Même code que j'utilise pour effectuer une opération de téléchargement. là ça fonctionne bien sans exception. mais tout en effectuant une opération de suppression lorsque je suis en train de récupérer le fichier "index" je reçois une exception sur l'instruction:
Carte filesUploaded = (HashMap) objIn.readObject();
Exception est:
GRAVE: null
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)
j'ai vérifié si les connexions du serveur FTPS sont correctement fermés après avoir effectué les opérations correspondantes. Je ne comprends pas où je me trompe.
s'il vous plaît donnez-moi vos précieuses suggestions. Je remercie toutes vos suggestions qui m'aideront à surmonter ce problème.
J'utilise org.apache.commons.net.ftp et « retrFile » est une méthode créée par moi pour récupérer les fichiers du serveur.
est ici le code pour "retrFile"
FTPSClient ftp; Public int retrFile (String nom de fichier, String savePath) { if (! Connected) { return ERR; }
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;
}