当前位置: 首页 > 面试题库 >

下载图像时,FileOutputStream崩溃并显示“打开失败:EISDIR(是目录)”错误

花飞扬
2023-03-14
问题内容

我正在尝试从互联网下载iamge,这是代码:

try {
                String imgURL = c.imgURL;
                String imgPATH = c.imgPATH;
                URL url = new URL(imgURL);
                URLConnection conexion = url.openConnection();
                conexion.connect();
                int lenghtOfFile = conexion.getContentLength();
                try {
                    File f = new File(imgPATH);
                    f.mkdirs();

                    BufferedInputStream input = new BufferedInputStream(url.openStream());
                    BufferedOutputStream output = new BufferedOutputStream(new FileOutputStream(imgPATH), 8192); // CRASH HERE

                    byte data[] = new byte[8192];
                    long total = 0;
                    int count = 0;
                    int updateUILimiter = 0;
                    while ((count = input.read(data)) != -1) {
                        total += count;

                        if (updateUILimiter == 20)
                            // publishProgress((int) (total * 100 / lenghtOfFile));
                            updateUILimiter = 0;
                        else
                            updateUILimiter++;

                        output.write(data, 0, count);

                        if (isCancelled()) {
                            output.flush();
                            output.close();
                            input.close();
                            return null;
                        }

                    }
                    output.flush();
                    output.close();
                    input.close();
                } catch (Exception e) {
                    c.imgPATH = "";
                    return null;
                }


            } catch (Exception e) {
                c.imgPATH = "";
                return null;
            }

这是错误消息:

/mnt/sdcard/tmp/3.png:打开失败:EISDIR(是目录)

为什么是这样?

“ / mnt / sdcard / tmp /”存在。


问题答案:

3.png是目录,因为您可以通过调用来建立目录f.mkdirs();。试试吧f.getParentFile().mkdirs()。从文档中:

创建 以此抽象路径名命名 的目录,包括任何必需但不存在的父目录。请注意,如果此操作失败,则可能已成功创建了一些必要的父目录。

(强调我的)。换句话说,File实例中包含的整个路径f被视为目录名,直到并包括最后一部分(3.png示例输出中)。



 类似资料:
  • 问题内容: 我正在尝试使webdriver.io和Jasmine工作。 按照他们的示例,我的脚本位于(根据配置),其中包含: 我使用wdio作为测试运行程序,并使用交互式设置进行设置。该配置是自动生成的,并且都非常简单明了,因此我认为不需要发布它。 在另一个终端窗口中,我正在使用Java 7运行selenium-server- andalone-2.47.1.jar。我的计算机上确实安装了Fire

  • 它将我带到图库以选择图像,但未显示在应用程序中,当单击上传按钮时,它只是一个空白图像视图 < li >我的Java代码 < li>XML代码 运行时显示此错误 java.lang.IllegalArgumentException:uri不能为空 以下两处给出错误的行显示了uri错误

  • 如何修复打开stream失败:是一个目录,我用的是< code>ubuntu 16.04和< code>PHP CodeIgniter框架。 法典 我正在尝试生成多个PDF文件,它会生成指定目录中的所有文件,但在过程结束时,它会显示一个名为 " Fopen(/path/)无法打开流:是一个目录" 并且还会抛出一条名为“无法创建输出”的消息

  • 下面给出的错误 process:com.example.rahul.maptask,pid:21986 java.lang.runtimeException:无法启动活动ComponentInfo{com.example.rahul.maptask/com.example.rahul.maptask.mainactivity}:java.lang.nullpointerException:试图在A

  • 我只是想打开eclipse开始一个android项目,但它给了我这个错误: 发生错误。请参阅日志文件 我没有见过这样的错误,一些关于其他主题的建议没有帮助,我不知道在这个长日志文件中从何开始。如果有人能帮我,我会很感激的。