访问SDCard抛出FileNotFoundException

在应用中访问SDCard时,抛出空指针例外一般是由于访问文件路径出错,或者没有添加访问SDCard的权限。但是文件路径是通过Environment.getExternalStorageDirectory()得到,通过Junit测试该路径能正常获得,不会出现文件路径错误,在主配置文件中配置的访问SDCard也正确。权限配置如下:

<!-- 在SDCard中创建与删除文件的权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

<!-- 往SDCard写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>可是用Junit测试访问SDCard时还能抛出空指针异常。这个问题太让人纠结了。

/**********************************************************异常信息***************************************************************/

java.io.FileNotFoundException: /mnt/sdcard/www.txt (Permission denied)
at org.apache.harmony.luni.platform.OSFileSystem.openImpl(Native Method)
at org.apache.harmony.luni.platform.OSFileSystem.open(OSFileSystem.java:152)
at java.io.FileOutputStream.<init>(FileOutputStream.java:97)
at java.io.FileOutputStream.<init>(FileOutputStream.java:69)
at cn.itcast.service.FileService.saveToSDCard(FileService.java:24)
at cn.itcast.junit.FileServiceTest.testSaveToSDCard(FileServiceTest.java:23)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:520)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1447)


/************************************************************************************************************************************/

经过不断检查,确认并非配置或代码有误。原来的程序代码是编写了一个Juint单元测试来测试saveToSDCard()方法,但无论如何测试都不通过。后来仔细研究也没个结果,最后不得不写了一个应用发布在手机上,然后通过手机端进行文件录入,竟然成功了!但是为什么用Junit测试死活不通过?这是Android的一个BUG吗?之前使用单元测试时都没有出现过这种问题,另外,在对手机自带的存储空间的文件访问测试时也能顺利通过。唯独测试访问SDCard时不能通过测试,还在纠结中......

注:以后在对SDCard文件访问测试时,最好是老老实实写一个应用发布到手机上,通过手机录入方式进行测试,而不是使用单元测试。个人比较喜欢单元测试,可能是我对单元测试环境不十分了解,希望能有不同的解答方法。
下面是源码
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值