在 Android 中从 URL 保存图像时出现只读错误

发布于 2024-10-22 12:47:47 字数 1196 浏览 5 评论 0原文

我试图在 Android 应用程序中保存来自 Web URL 的图像,但是当我运行它时,日志猫会抛出一个异常,说它是“只读”。我不知道发生了什么事。

这是我的下载器类:

  public class ImageDownload {

public static void downloader(String imageURL, String fileName) { 
        try {
                URL url = new URL("http://www.exampleurl.com/" + imageURL); 
                File file = new File(fileName);


                URLConnection con = url.openConnection();

                InputStream is = con.getInputStream();
                BufferedInputStream bis = new BufferedInputStream(is);

                ByteArrayBuffer baf = new ByteArrayBuffer(50);
                int current = 0;
                while ((current = bis.read()) != -1) {
                        baf.append((byte) current);
                }

                FileOutputStream fos = new FileOutputStream(file);
                fos.write(baf.toByteArray());
                fos.close();

        } catch (IOException e) {
                Log.d("Downloader", "Error: " + e);
        }

}
}

当我运行它时,这是我从 logcat 得到的:

DEBUG/Downloader(22112): Error: java.io.FileNotFoundException: /example.gif (Read-only file system)

任何帮助都会很棒。谢谢。

I am trying to save an image from a web URL in an android application however when I run it, the log cat throws an exception saying its "read only". I don't know whats going on.

Here is my downloader class:

  public class ImageDownload {

public static void downloader(String imageURL, String fileName) { 
        try {
                URL url = new URL("http://www.exampleurl.com/" + imageURL); 
                File file = new File(fileName);


                URLConnection con = url.openConnection();

                InputStream is = con.getInputStream();
                BufferedInputStream bis = new BufferedInputStream(is);

                ByteArrayBuffer baf = new ByteArrayBuffer(50);
                int current = 0;
                while ((current = bis.read()) != -1) {
                        baf.append((byte) current);
                }

                FileOutputStream fos = new FileOutputStream(file);
                fos.write(baf.toByteArray());
                fos.close();

        } catch (IOException e) {
                Log.d("Downloader", "Error: " + e);
        }

}
}

When I run this, this is what I get from the logcat:

DEBUG/Downloader(22112): Error: java.io.FileNotFoundException: /example.gif (Read-only file system)

Any help would be great. Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

塔塔猫 2024-10-29 12:47:47

new File(fileName); 调用默认的目录不可写。要获取当前上下文的文件写入目录的路径,请使用 getFilesDir()。所以 new File(getFilesDir()+fileName); 相当于在“当前”目录中打开文件的通常 java 行为。

The directory that the new File(fileName); call defaults to is not writeable. To get the path to the file writing directory for the current context, you use getFilesDir(). So new File(getFilesDir()+fileName); equates to the usual java behaviour of opening a file in the "current" directory.

温柔一刀 2024-10-29 12:47:47

尝试保存到/sdcard/example.gif

try saving to /sdcard/example.gif

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文