从URL(互联网)中检索所有图像并将其保存在本地(SD卡) - Android

时间:2012-01-29 04:30:05

标签: android url

嗯......我的应用程序在互联网上有很多图像。它们存储在文件夹和子文件夹中,如类别。

首次启动我的应用时,我想允许用户将所有这些内容下载到他/她的内部SD卡。

以下是我要做的事情:

    URL url = new URL ("www.mysite.com/folder1/subfolder1/anImage.png");
    InputStream input = url.openStream();
    try {
        OutputStream output = new FileOutputStream ("/sdcard/myImage.png");
        try {
            byte[] buffer = new byte[aReasonableSize];
            int bytesRead = 0;
            while ((bytesRead = input.read(buffer, 0, buffer.length)) >= 0) {
                output.write(buffer, 0, bytesRead);
            }
        } finally {
            output.close();
        }
    } finally {
        input.close();
    }

好的......上面的代码允许我从一个链接保存一个图像。

如何全部检索?

此外,是否可以通知用户将传输多少数据(MB)?

感谢任何帮助!

谢谢!

1 个答案:

答案 0 :(得分:0)

Here是关于how to download images的一个很好的例子和解释。
您可以通过以下方法计算远程文件的大小。将URL数组传递给此方法,它将返回以字节为单位的大小。

public static int getSize(String[] urls){
    int sizeInBytes = 0;
    for (String string : urls) {
        sizeInBytes += ((int) (new File(string)).length());         
    }
    return sizeInBytes;
}


您还可以在SD卡上下载后计算图像大小将目录文件(保存所有图像的位置)传递给getSize(...)方法,它将返回目录大小以字节为单位。

String basePath = Environment.getExternalStorageDirectory().toString();
File file = new File(basePath +"file/myImageDirectory/");
ClassName.getSize(file);

计算目录大小的方法。

public static int getSize(File directory) {
    return getSize(directory, 0);
}
private static int getSize(File directory,int sizeInBytes) {

    if (directory == null)
        return sizeInBytes;
    if (!directory.exists())
        return sizeInBytes;
    if (directory.isDirectory()) {
        String[] list = directory.list();
        // Some JVMs return null for File.list() when the
        // directory is empty.
        if (list != null) {
            for (int i = 0; i < list.length; i++) {
                File entry = new File(directory, list[i]);
                if (entry.isDirectory()) {
                    sizeInBytes = getSize(entry,sizeInBytes);
                } else {
                    sizeInBytes +=entry.length();
                }
            }
        }
    }
    return sizeInBytes;
}

一个MB=1024*1024,您可以通过将SizeInMB除以MB的大小来获得sizeInBytes; sizeInMB=sizeInBytes/MB;