私はインターネットから画像をダウンロードしようとしています、ここにコードがあります:
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
_)までのディレクトリ名と見なされます。
問題は、関数を使用していることです
f.mkdirs();
この関数は、「3.png」というファイルではなく「3.png」というフォルダを作成するため、最初にこのフォルダを削除し、
次に、関数を置き換えます
f.mkdirs();
に
f.createNewFile();
この助けを願っています。
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);