問題描述:
Android open failed: ENOENT (No such file or directory)
原因:
? ? 應(yīng)用在sdcard中緩存文件的時候窝革,如果文件夾被不小心刪除涩哟,往該文件寫入數(shù)據(jù)的時候声畏,由于沒有找到路徑,所以報錯射窒。最主要是因為FileOutputStream創(chuàng)建一個流文件路徑時或者是對一個File文件路徑直接操作時霹崎,沒有捕獲異常。
解決方式:
(1)檢查是否有加入權(quán)限尸疆,如果沒有加首先加上。
<user-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
(2)檢查創(chuàng)建文件的時候是否有添加try...catch()惶岭,如果沒有請加上,示例如下所示:
沒加之前的代碼:
public static void makeRootDirectory(String filePath) {
File file =file =newFile(filePath);
if(!file.exists()) {
file.mkdir();
}}
修改過后的代碼:
public static void makeRootDirectory(String filePath) {
File file =null;
try{
file =newFile(filePath);
if(!file.exists()) {
file.mkdir();}
}catch(Exception e) {}}
(3)如果加上了try...catch()仍然報錯犯眠,請檢查路徑時候包含目錄按灶,如:目錄+a.txt;示例如下:
沒加之前的代碼:
private BufferedOutputStream createOutputStream(Context context, String name)
throws FileNotFoundException {
File file = null;
try {
//這里的getWorkDirManager.getPath()表示一個目錄的路徑,name表示該目錄下的一個文件
file = new File(getWorkDirManager().getPath() + "/" + name);
} catch (Exception e) {
log.d("exception="+e.toString());
}// true表示已追加的方式寫入文件筐咧,false表示已覆蓋的方式寫入文件鸯旁,解決同一個份內(nèi)容寫入多次的問題
FileOutputStream fileOutputStream = new FileOutputStream(file, false);
return new BufferedOutputStream(fileOutputStream);}
修改后的代碼:
private BufferedOutputStream createOutputStream(Context context, String name)
throws FileNotFoundException {
File file = null;
File fileDir=null;
try {
fileDir=new File(getWorkDirManager().getPath());
if(!fileDir.exists()){
fileDir.mkdir();
}
file = new File(getWorkDirManager().getPath() + "/" + name);
} catch (Exception e) {
}
log.d("exception="+e.toString());
}
// true表示已追加的方式寫入文件,false表示已覆蓋的方式寫入文件量蕊,解決同一個份內(nèi)容寫入多次的問題
FileOutputStream fileOutputStream = new FileOutputStream(file, false);
return new BufferedOutputStream(fileOutputStream);
}