Отправка базы данных через ftp - Получение другого файла - PullRequest
4 голосов
/ 31 марта 2012

В настоящее время я использую этот код для отправки базы данных по 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 ничего не показывает, когда я открываю его.Он работает с очень маленькой базой данных, но как только база данных становится больше, я получаю эту проблему.

Мне было интересно, может ли это быть связано с размером буфера?Может ли кто-нибудь пролить свет на то, почему это происходит?

Спасибо

Ответы [ 2 ]

0 голосов
/ 24 апреля 2012

Копия базы данных SQLite кажется поврежденной при генерации на устройстве, а не в эмуляторе

Открытие файла базы данных в другой программе кажется работающим.См. Ссылку выше.

0 голосов
/ 17 апреля 2012

Код, который вы разместили, не будет работать для файлов, которые не помещаются в буфер буферизованного входного потока.То, что вам нужно сделать, это многократно читать из входного потока до его конца:

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().Также, как предлагают комментаторы, вам нужно проверить коды возврата с сервера и правильно обработать ошибки.

...