34

インターネットから 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: open failed: EISDIR (ディレクトリです)

どうしてこれなの?

「/mnt/sdcard/tmp/」が存在します。

4

4 に答える 4

96

3.pngはディレクトリですf.mkdirs();f.getParentFile().mkdirs()代わりに試してください。ドキュメントから:

必要だが存在しない親ディレクトリを含む、この抽象パス名で指定されたディレクトリを作成します。この操作が失敗した場合、必要な親ディレクトリの作成に成功している可能性があることに注意してください。

(強調鉱山)。つまり、Fileインスタンスに含まれるパス全体fが、最後の部分 (3.png出力例) までのディレクトリ名と見なされます。

于 2012-09-09T14:14:30.150 に答える
5

f.mkdirs()と置き換えますf.createNewFile().

于 2013-12-25T06:56:04.240 に答える