open failed: EISDIR (Is a directory)

android open failed: EISDIR (Is a directory)錯誤

一、我是需要從 一個目錄下copy一個文件到另一個目錄下,遇到 這個問題後,首先上網查了,然後根據網上的方案解決,還是解決不了,後來仔細的看自己的代碼,終於找到問題,解決bug,記錄一下。

二、異常說明:

這個異常表明程序應該是對一個文件進行操作,而你傳入程序的是一個文件夾對象。

網上的解決辦法:

1、這個異常是因爲在創建目錄文件夾的時候,應該一層一層的創建文件夾,例如:我要創建"/sdcard/Download/test/picture"這樣的路徑文件夾,其中“test”和“picture”文件夾都是不存在的,需要mkdir來生成空文件夾,但是不能一次同時創建這兩個文件夾,而是要一層一層的來,一個一個的來,先創建"test"文件夾,然後再創建“picture”文件夾2、今天在做項目的適合,遇到android failed:EISDIR(Is a directory)的錯誤。

2、反覆調試,才發現我在下面代碼中

FileOutputStream f = context.openFileOutput("name",
context.MODE_PRIVATE);
PrintStream temp = new PrintStream(f);
temp.println(content);
temp.close();

我的應用程序的數據文件夾已經有name的文件夾名,在存放一個name命名的文件的時候就會報錯:這是一個目錄

Is a directory。

所以要先刪除和這個文件同名的文件夾的名字

3、按照這兩種可能去找問題,發現不對路,沒辦法了,去官網,看一下File類,這才發現File類的構造函數中:File(File, String)構造函數創建的對象是文件夾,File(String, String)函數創建的對象纔是文件,所以只需把上訴代碼中的

File file = new File(dir, "header.jpg")

改爲:

File file = new File(dir.getPath(), "header.jpg")

 三、通過網上找的幾種解決方案,我仔細對照我的代碼,終於發現我的問題所在了。解決如下 

1、我在copy到目標目錄下時,目標目錄也存在了,但是我copy的時候,新的目標路徑 只 設到目標路徑的path,後邊忘記加文件的名字,幫造成這個問題,後來,我把目標文件夾路徑後+我的文件名,問題得以解決

例:

//urlIcon path路徑
//iconName.get(j)  文件名字 
String oldUrlIconpath = urlIcon + iconName.get(j);

Log.e("aaa", "---for--oldUrlIconpath=" + oldUrlIconpath.toString());
String path1 = getFilesDir().getAbsolutePath();
String filePicturepath = path1 + File.separator + "picture" + File.separator;
Log.e("aaa", "---for--filePicturepath=" + filePicturepath.toString());
File filePicture = new File(filePicturepath);
String newIconPath = filePicture + File.separator + iconName.get(j);//問題就出在這裏,沒加文件名字
isCopyUrlIconSuccess = FileUtils.copy_File(new File(oldUrlIconpath), new File(newIconPath));上

上面就是我的代碼,出問題的地方就在紅色字體,未加文件名字導致這個錯誤。特些記錄。

通過第二點的bug解釋,仔細理解,它說得很明白 ,就是要操作一個文件,而我在操作一個文件夾,故出現錯誤。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章