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解释,仔细理解,它说得很明白 ,就是要操作一个文件,而我在操作一个文件夹,故出现错误。