ファイルをダウンロードしようとしていますが、ディレクトリとしてダウンロードしていて、何が問題なのかわかりません。私が使用しているクラスは、他のプロジェクトで問題なく使用されています。
outfile は、出力ディレクトリ /mnt/sdcard/file.ext へのフル パスです。
public class DownloadFile {
String outfile;
String zipfile;
Context c;
Notification notification;
NotificationManager notificationManager;
ProgressBar progressBar;
private int progress = 10;
public DownloadFile(String url, String out, String zip, Context ctx) {
c = ctx;
zipfile = zip;
outfile = out;
notificationManager = (NotificationManager) c.getSystemService(
c.NOTIFICATION_SERVICE);
new Download().execute(url);
}
private class Download extends AsyncTask<String, Integer, String>{
@Override
protected String doInBackground(String... urls) {
int count;
try {
URL url = new URL(urls[0]);
URLConnection conexion = url.openConnection();
conexion.connect();
int lenghtOfFile = conexion.getContentLength();
InputStream input = new BufferedInputStream(url.openStream());
//LINE 55 is below
OutputStream output = new FileOutputStream(outfile);
byte data[] = new byte[1024];
long total = 0;
while ((count = input.read(data)) != -1) {
total += count;
publishProgress((int)(total*100/lenghtOfFile));
output.write(data, 0, count);
}
output.flush();
output.close();
input.close();
} catch (Exception e) {
e.printStackTrace();
}
return zipfile;
}
protected void onPreExecute() {
Intent intent = new Intent(c, DownloadFile.class);
final PendingIntent pendingIntent = PendingIntent.getActivity(c, 0, intent, 0);
notification = new Notification(R.drawable.ic_launcher, "simulating a download", System
.currentTimeMillis());
notification.flags = notification.flags | Notification.FLAG_ONGOING_EVENT;
notification.contentView = new RemoteViews(c.getPackageName(), R.layout.download_progress);
notification.contentIntent = pendingIntent;
notification.contentView.setImageViewResource(R.id.status_icon, R.drawable.ic_launcher);
notification.contentView.setTextViewText(R.id.status_text, "simulation in progress");
notification.contentView.setProgressBar(R.id.status_progress, 100, progress, false);
notificationManager.notify(42, notification);
}
protected void onProgressUpdate(Integer... args){
notification.contentView.setProgressBar(R.id.status_progress, 100, args[0], false);
}
protected void onPostExecute(String f) {
Toast.makeText(c, "DONE WITH "+f, 9965454).show();
notificationManager.cancel(42);
}
}
}
これがスローされるエラーです。
W/System.err(15992): java.io.FileNotFoundException: /mnt/sdcard/t3hh4xx0r/romCrawler/imoseyon_leanKernel_v1.9.0gnexus.zip: open failed: EISDIR (Is a directory)
W/System.err(15992): at libcore.io.IoBridge.open(IoBridge.java:406)
W/System.err(15992): at java.io.FileOutputStream.<init>(FileOutputStream.java:88)
W/System.err(15992): at java.io.FileOutputStream.<init>(FileOutputStream.java:128)
W/System.err(15992): at java.io.FileOutputStream.<init>(FileOutputStream.java:117)
W/System.err(15992): at com.t3hh4xx0r.romcrawler.DownloadFile$Download.doInBackground(DownloadFile.java:55)
W/System.err(15992): at com.t3hh4xx0r.romcrawler.DownloadFile$Download.doInBackground(DownloadFile.java:1)
W/System.err(15992): at android.os.AsyncTask$2.call(AsyncTask.java:264)
W/System.err(15992): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
W/System.err(15992): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
W/System.err(15992): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
W/System.err(15992): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
W/System.err(15992): at java.lang.Thread.run(Thread.java:856)
W/System.err(15992): Caused by: libcore.io.ErrnoException: open failed: EISDIR (Is a directory)
W/System.err(15992): at libcore.io.Posix.open(Native Method)
W/System.err(15992): at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
W/System.err(15992): at libcore.io.IoBridge.open(IoBridge.java:390)
W/System.err(15992): ... 11 more
ファイルをディレクトリとしてダウンロードしようとするのはなぜですか?
編集
問題の詳細については、エラーにリストされている/mnt/sdcard/t3hh4xx0r/romCrawler/imoseyon_leanKernel_v1.9.0gnexus.zip
パスは、ダウンロードしようとしているファイルのパスとファイル名です。ただし、ダウンロードする代わりに、その名前のフォルダーを作成します。imoseyon_leanKernel_v1.9.0gnexus.zip
SDカードに次の名前のフォルダーがあります`/mnt/sdcard/t3hh4xx0r/romCrawler/