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解釋,仔細理解,它說得很明白 ,就是要操作一個文件,而我在操作一個文件夾,故出現錯誤。