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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值