关于返回一个盘下所有文件的问题,我用了一个简单的递归调用来实现,但是在调试的时候出现了问题:这是传入一个盘符的情况:
结果:直接报空指针异常,来源于showAllfiles(File)方法的File数组,也就是说根本就没有获取到数据;这是传入一个文件夹的情况:
结果:正常运行;
楼主百思不得原因,又试了试在main()主函数中由封装了盘符的File对象直接调用listFiles(File)方法,结果成功返回,然后楼主又在mian()创建了一个新的File对象引用,将封装了盘符的File对象的引用赋值给它,再调用listFiles()方法,依然成功,也就是说,问题应该是出现在调用方法的问题上,但是实在不知道这中间有何区别,只好请教各位,这到底是什么原因呢?

解决方案 »

  1.   

    判断下files是否为空,不是空就for, 应该是e盘有空文件夹
      

  2.   

    因为深层遍历盘符时,盘符下面有系统级别的目录,java可以获取到该目录的名称和对象,但是该目录文件对象在调用list 或 listFiles 方法时,因为权限问题无法访问内部文件,
    固方法返回的文件对象数组无法创建,那么for循环的变量名 files 无数组实体指向,则传入递归方法的onefile 也就无对象实体指向,就会发生控制针异常,这里的空指针就是文件对象数组无指向导致的,简单的说,循环遍历目录是碰到系统级别目录,java无权限对系统级别目录进行访问,出现异常,方法弹栈。