Я уже некоторое время выдергиваю свои волосы на этом. Следующий метод должен загрузить файл и сохранить его в месте, указанном на жестком диске.
private static void saveImage(Context context, boolean backgroundUpdate, URL url, File file) {
if (!Tools.checkNetworkState(context, backgroundUpdate))
return;
// Get the image
try {
// Make the file
file.getParentFile().mkdirs();
// Set up the connection
URLConnection uCon = url.openConnection();
InputStream is = uCon.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
// Download the data
ByteArrayBuffer baf = new ByteArrayBuffer(50);
int current = 0;
while ((current = bis.read()) != -1) {
baf.append((byte) current);
}
// Write the bits to the file
OutputStream os = new FileOutputStream(file);
os.write(baf.toByteArray());
os.close();
} catch (Exception e) {
// Any exception is probably a newtork faiilure, bail
return;
}
}
Также, если файл не существует, он должен создать каталог для файла. (И если в этом месте уже есть другой файл, он ничего не должен делать). Однако по какой-то причине метод mkdirs () никогда не создает каталог. Я перепробовал все, от явных скобок, до явного создания родительского файла, и, похоже, ничего не работает. Я вполне уверен, что диск доступен для записи, так как он вызывается только после того, как он уже определен, и это верно после запуска его во время отладки. Таким образом, метод не работает, потому что родительские каталоги не созданы. Может кто-нибудь сказать мне, если что-то не так с тем, как я это называю?
Кроме того, если это поможет, вот источник файла, в который я его вызываю:
https://github.com/LeifAndersen/NetCatch/blob/master/src/net/leifandersen/mobile/android/netcatch/services/RSSService.java
Спасибо