我正在尝试从互联网上下载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 /”存在。
答案 0 :(得分:78)
3.png
是一个目录,因为您可以通过调用f.mkdirs();
来实现。请尝试使用f.getParentFile().mkdirs()
。来自documentation:
创建由此抽象路径名命名的目录,包括任何必要但不存在的父目录。请注意,如果此操作失败,则可能已成功创建了一些必要的父目录。
(强调我的)。换句话说,File
实例f
中包含的整个路径被视为目录名,包括最后一部分(示例输出中的3.png
)。
答案 1 :(得分:13)
问题是您正在使用该功能
f.mkdirs();
此函数将创建一个名为“3.png”的文件夹而不是名为“3.png”的文件,因此请先删除此文件夹,
然后替换功能
f.mkdirs();
到
f.createNewFile();
希望得到这个帮助。
答案 2 :(得分:5)
将f.mkdirs()
替换为f.createNewFile().
答案 3 :(得分:2)
URL downloadURL=null;
HttpURLConnection urlConnection=null;
InputStream inputStream=null;
FileOutputStream fos=null;
Uri uri=Uri.parse(url);
try {
downloadURL=new URL(url);
urlConnection= (HttpURLConnection) downloadURL.openConnection();
inputStream=urlConnection.getInputStream();
File file=new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath()+"/myAppImages/");
if(!file.exists())
{
file.mkdirs();
}
File file1=new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath()+"/myAppImages/"+uri.getLastPathSegment());
fos=new FileOutputStream(file1);
byte[] buffer=new byte[1024];
int read=-1;
while((read=inputStream.read(buffer))!=-1)
{
/* Message.L(""+read);*/
fos.write(buffer,0,read);
}
}
File file=new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath()+"/myAppImages/");
if(!file.exists())
{
file.mkdirs();
}
File file1=new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath()+"/myAppImages/"+uri.getLastPathSegment());
fos=new FileOutputStream(file1);