我遇到的问题是,当用户删除正在使用的某些文件夹时,我的Android应用程序无法正常工作 要解决此问题,每次应用程序访问(创建或修改文件)文件夹时,都会调用一个函数来确保该文件夹存在。
/**
* ensure that cache folder exists<br/>
* */
public void ensureCacheFolderExist(){
File cacheFile = new File(AUDIO_CACHE_PATH);
if (!cacheFile.exists()) {
boolean returnValue=cacheFile.mkdirs();
MusicUtils.logE("ensureCacheFolderExist no"+returnValue);
} else {
MusicUtils.logE("ensureCacheFolderExist yes");
if (cacheFile.isFile()) {
cacheFile.delete();
}
}
}
但returnValue始终为false
所以这似乎不起作用。
可能的方法是将AUDIO_CACHE_PATH文件夹设置为隐藏文件。系统默认文件管理器无法看到它。但是第三方可以看到,例如Root Explorer。
这似乎不是最佳选择
有没有办法解决这个问题?
AUDIO_CACHE_PATH定义如下(Just key point),我可以确保问题不是由此引起的:
public static String getSDCardPath() {
//String szDir = Environment.getExternalStorageDirectory().getPath();
String szDir = Environment.getExternalStorageDirectory().getAbsolutePath();
if (szDir.substring(szDir.length() - 1).equals(File.separator) == false) {
szDir += File.separator;
}
return szDir;
}
public static final String DOWNLOAD_LOCAL_PATH = HardwareUtil.getSDCardPath() + "sogouappmall";
private final String AUDIO_CACHE_PATH = DOWNLOAD_LOCAL_PATH + File.separator + ".mp3";
答案 0 :(得分:0)
除非你的存储卡内存不足,否则我看不出它没有做mkdirs的原因。我希望你已经获得了明确的许可。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
只是为了排除路径问题,请替换
File cacheFile = new File(AUDIO_CACHE_PATH);
与
File cacheFile = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_DCIM), "sogouappmall/mp3");