java - 如何从互联网将文件写入SD卡?

标签 java android download save sd-card

一个例子是一个简单的图像。

我已经尝试了很多东西,尽管它很有意义,但它就是拒绝工作。

到目前为止我所做的是能够抓取 25 张图片并将它们添加到

/sdcard/应用程序名称/sub/dir/filename.jpg

它们都根据 DDMS 出现在那里,但它们的文件大小始终为 0。

我猜这可能是因为我的输入流?

这是我处理下载和保存的函数。

public void DownloadPages()
{   
    for (int fileC = 0; fileC < pageAmount; fileC++)
    {

        URL url;
        String path = "/sdcard/Appname/sub/dir/";

        File file = new File(path, fileC + ".jpg");

        int size=0;
        byte[] buffer=null;

        try{
            url = new URL("http://images.bluegartr.com/bucket/gallery/56ca6f9f2ef43ab7349c0e6511edb6d6.png");
            InputStream in = url.openStream();

            size = in.available();  
            buffer = new byte[size];  
            in.read(buffer);  
            in.close();  
        }catch(Exception e){

        }

            if (!new File(path).exists())
                new File(path).mkdirs();

       FileOutputStream out;

       try{
           out = new FileOutputStream(file);
           out.write(buffer);  
           out.flush();  
           out.close();
       }catch(Exception e){

       }


    }

}

它一直在该目录中提供 25 个文件,但所有文件大小均为零。我不知道为什么。这实际上与我在 java 程序中使用的代码相同。

附注...

如果你要给我一个解决方案...我已经尝试过这样的代码。这不起作用。

    try{
        url = new URL(urlString);
        in = new BufferedInputStream(url.openStream());
        fout = new FileOutputStream(filename);

        byte data[] = new byte[1024];
        int count;
        System.out.println("Now downloading File: " + filename.substring(0, filename.lastIndexOf(".")));
        while ((count = in.read(data, 0, 1024)) != -1){
            fout.write(data, 0, count);
        }
    }finally{
            System.out.println("Download complete.");
            if (in != null)
                    in.close();
            if (fout != null)
                    fout.close();
    }
}

这是我的目录的图像

http://oi48.tinypic.com/2cpcprm.jpg

最佳答案

对您的第二个选项进行一些更改,请按以下方式尝试,

byte data[] = new byte[1024];
long total = 0;

int count;

while ( ( count = input.read(data)) != -1 )
{
    total += count;
    output.write( data,0,count );
}

这与 while 语句中的不同 while ((count = in.read(data, 0, 1024)) != -1)

关于java - 如何从互联网将文件写入SD卡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13437521/

相关文章:

java - 我如何检查 switch 中的以下条件而不是 if?

android - 如何为 React Native 定义全局 gradle 路径

R - 从原始数据集中下载子集

concurrency - 限制 ansible playbook 任务并发

php - 在浏览器中从CDN下载文件并设置下载的文件名

java - 作为 Java 应用程序运行会弹出选择 Java 应用程序屏幕,无需进一步说明

java - 如何翻译 ARCore 和 Sceneform 中的对象?

java - 如何从 TreeSet 中删除最旧的 Student 对象?

java - Android Wear 位置

安卓动态壁纸幻灯片动画