2012-03-31 15 views
4

ich zur Zeit diesen Code mit Hilfe einer Datenbank über FTP senden (Apache Commons verwenden)eine databse via ftp Senden - Getting eine andere Datei

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 
} 

ich verwendet habe, um eine Textdatei zu senden und es funktioniert. Allerdings habe ich es mit meiner Datenbank versucht und eine Datei der gleichen Größe wird auf den Server gestellt, aber SQLite Browser zeigt nichts an, wenn ich es öffne. Es funktioniert auf einer wirklich kleinen Datenbank, aber sobald die Datenbank größer ist, bekomme ich dieses Problem.

Ich fragte mich, ob es mit der Puffergröße zu tun sein könnte? Könnte jemand etwas Licht in die Frage bringen, warum dies geschieht?

Dank

+0

Überprüfen Sie die offizielle doc: https://commons.apache.org/net/api-3.1/org/apache/commons/net/ftp/FTPClient.html vielleicht finden Sie, was Sie verpasst haben (zum Beispiel Sie überprüfen nie den Antwortcode vom Server, der Ihnen Informationen geben kann). Wenn Sie direkt auf FTP zugreifen können, sehen Sie sich die Protokolldateien an - sie werden Ihnen alles erzählen. – hovanessyan

Antwort

0

Der Code wurde nicht für Dateien geschrieben wird funktionieren, die an den gepufferten Puffer passen nicht den Eingangsstrom. Was Sie tun müssen, um immer wieder aus dem Eingabestrom bis zum Ende gelesen wird:

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(); 

Wichtig ist die Verwendung von storeFileStream() statt storeFile() ist. Wie Kommentatoren vorschlagen, müssen Sie die Rückgabecodes vom Server überprüfen und eine ordnungsgemäße Fehlerbehandlung durchführen.