首先,我想说明我确实有
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
在我的清单中指定了,我检查了Environment.MEDIA_MOUNTED。
在我看来,真正奇怪的是它返回true,但实际上并没有创建目录。
public static void downloadFiles(ArrayList<FileList> list) {
for (FileList file: list) {
try {
// This will be the download directory
File download = new File(downloadDirPatch.getCanonicalPath(), file.getPath());
// downloadDirPatch is defined as follows in a different class:
//
// private static String updateDir = "CognitionUpdate";
// private static File sdcard = Environment.getExternalStorageDirectory();
// final public static File downloadDir = new File(sdcard, updateDir);
// final public static File downloadDirPatch = new File(downloadDir, "patch");
// final public static File downloadDirFile = new File(downloadDir, "file");
if (DEV_MODE)
Log.i(TAG, "Download file: " + download.getCanonicalPath());
// Check if the directory already exists or not
if (!download.exists())
// The directory doesn't exist, so attempt to create it
if (download.mkdirs()) {
// Directory created successfully
Download.download(new URL(file.getUrl() + file.getPatch()), file.getPath(), file.getName(), true);
} else {
throw new ExternalStorageSetupFailedException("Download sub-directories could not be created");
}
else {
// Directory already exists
Download.download(new URL(file.getUrl() + file.getPatch()), file.getPath(), file.getName(), true);
}
} catch (FileNotFoundException fnfe) {
fnfe.printStackTrace();
} catch (IOException ie) {
ie.printStackTrace();
} catch (ExternalStorageSetupFailedException essfe) {
essfe.printStackTrace();
}
}
}
“if(download.mkdirs())”返回true,但当应用程序实际下载文件时,它会抛出一个
FileNotFoundException: open failed: ENOENT (No such file or directory)
异常,当我在手机上检查目录后,它就不存在了。
在该程序的早期,该应用程序设置了父下载目录,并且使用File.mkdir()一切正常,但File.mkdirs()似乎对我不起作用。
答案 0 :(得分:2)
您的问题没有提供有关FileNotFoundException
的详细信息。检查触发此操作的路径。忘记你认为路径是什么,记录它或通过调试器运行它以查看它到底是什么。
根据未正确创建的目录,验证(用你的眼睛)路径确实是你认为的路径。我发现您已经记录download.getCanonicalPath
,请检查日志中的实际内容。
最后,Download.download
真的能保存你认为的地方吗?在您调用它之前,您正在使用download
准备和验证目录,但是当您拨打download
时,您没有使用Download.download
,因此无法分辨。
顺便说一句,不要重复自己,你可以在不重复Download.download
行的情况下重写:
if (!download.exists())
if (!download.mkdirs()) {
throw new ExternalStorageSetupFailedException("Download sub-directories could not be created");
}
}
Download.download(new URL(file.getUrl() + file.getPatch()), file.getPath(), file.getName(), true);