访问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文件访问测试时,最好是老老实实写一个应用发布到手机上,通过手机录入方式进行测试,而不是使用单元测试。个人比较喜欢单元测试,可能是我对单元测试环境不十分了解,希望能有不同的解答方法。
下面是源码

你可能感兴趣的:(java,apache,android,JUnit,单元测试)