我正在尝试从互联网上下载 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/” 存在。
原文由 Omar 发布,翻译遵循 CC BY-SA 4.0 许可协议
3.png
是一个目录,因为您通过调用f.mkdirs();
来创建目录。尝试f.getParentFile().mkdirs()
代替。从 文档 中:(强调我的)。换句话说,包含在
File
实例f
中的整个路径被认为是一个目录名,直到并包括最后一部分(3.png
示例输出)。