黑马程序员技术交流社区

标题: 紧急求救 关于File遍历磁盘文件的问题 [打印本页]

作者: 孙沛    时间: 2012-9-16 11:13
标题: 紧急求救 关于File遍历磁盘文件的问题
本帖最后由 孙沛 于 2012-9-16 11:25 编辑

File遍历磁盘文件的问题
import java.io.*;
class FileDemo2{
        public static void main(String[] args){
                getAllFiles();
        }
        public static void getAllFiles(){
                File[] rootFiles = File.listRoots();
                for(File f:rootFiles){
                        String[] names = f.list();
                        System.out.println(f);
                        for(String name:names){
                                System.out.println(name);
                        }
                }
        }
}


为什么冒出空指针异常的错误啊,我的磁盘只有c、d两个盘,结果冒出 个F盘





未命名.jpg (13.24 KB, 下载次数: 129)

未命名.jpg

jj.jpg (24.49 KB, 下载次数: 133)

jj.jpg

作者: 马睿    时间: 2012-9-16 11:24
……F盘是你的光驱
遍历文件存根包括外接的光驱设备
你光驱里没盘,无法读取识别,当然报错了。
作者: 田旭阳    时间: 2012-9-16 11:27
F盘是你的光驱
作者: 孙沛    时间: 2012-9-16 11:27
马睿 发表于 2012-9-16 11:24
……F盘是你的光驱
遍历文件存根包括外接的光驱设备
你光驱里没盘,无法读取识别,当然报错了。 ...

不会吧,光驱也读?,那怎样把光驱省略呢
作者: 陈俊来    时间: 2012-9-16 11:28
F:\是你的cd驱动器。这样的也被当作本地磁盘给读了。
需求是得到所有的文件。所以可以在代码中加一个判断
class FileDemo2 {
                public static void main(String[] args) {
                        getAllFiles();
                }

                public static void getAllFiles() {
                        File[] rootFiles = File.listRoots();
                       
                        for (File f : rootFiles) {
                                String[] names = f.list();
                                if(names==null)
                                        continue;
                               
                                                              System.out.println(f);
                                for (String name : names) {
                                        System.out.println(name);
                                }
                        }
                }
        }

作者: 马睿    时间: 2012-9-16 11:29
提供你一个解决方案
class FileDemo2{
    public static void main(String[] args){
            getAllFiles();
    }
    public static void getAllFiles(){
            File[] rootFiles = File.listRoots();
            while(File!=null)
            {
                for(File f:rootFiles){
                        String[] names = f.list();
                        System.out.println(f);
                        for(String name:names){
                                System.out.println(name);
                        }
                }
            }
    }
}

作者: 史小兵    时间: 2012-9-16 11:30
F盘是你的光驱
当你在遍历磁盘文件时默认是包括外接的光驱设备的,当你遍历完全其他的盘,遍历到f盘时,你f中没有可以检索的
因此就会报空指针异常了!
作者: 孙沛    时间: 2012-9-16 11:34
ok,已成功
我插了一句        if(names==null) break;
就成功了
作者: 陈俊来    时间: 2012-9-16 11:41
孙沛 发表于 2012-9-16 11:34
ok,已成功
我插了一句        if(names==null) break;
就成功了

lz,要是使用break的话,加入C:盘没有文件的话,就跳出for循环了,D盘文件也就没法遍历了,
所以我感觉还是用continue好一些。

作者: 孙沛    时间: 2012-9-16 11:56
陈俊来 发表于 2012-9-16 11:41
lz,要是使用break的话,加入C:盘没有文件的话,就跳出for循环了,D盘文件也就没法遍历了,
所以我感觉 ...

说的对,:handshake




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2