A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙沛 中级黑马   /  2012-9-16 11:13  /  2847 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 孙沛 于 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, 下载次数: 132)

未命名.jpg

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

jj.jpg

9 个回复

倒序浏览
……F盘是你的光驱
遍历文件存根包括外接的光驱设备
你光驱里没盘,无法读取识别,当然报错了。
回复 使用道具 举报
F盘是你的光驱
回复 使用道具 举报
马睿 发表于 2012-9-16 11:24
……F盘是你的光驱
遍历文件存根包括外接的光驱设备
你光驱里没盘,无法读取识别,当然报错了。 ...

不会吧,光驱也读?,那怎样把光驱省略呢
回复 使用道具 举报
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);
                                }
                        }
                }
        }
回复 使用道具 举报
提供你一个解决方案
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);
                        }
                }
            }
    }
}
回复 使用道具 举报
F盘是你的光驱
当你在遍历磁盘文件时默认是包括外接的光驱设备的,当你遍历完全其他的盘,遍历到f盘时,你f中没有可以检索的
因此就会报空指针异常了!
回复 使用道具 举报
孙沛 中级黑马 2012-9-16 11:34:57
8#
ok,已成功
我插了一句        if(names==null) break;
就成功了
回复 使用道具 举报
孙沛 发表于 2012-9-16 11:34
ok,已成功
我插了一句        if(names==null) break;
就成功了

lz,要是使用break的话,加入C:盘没有文件的话,就跳出for循环了,D盘文件也就没法遍历了,
所以我感觉还是用continue好一些。
回复 使用道具 举报
陈俊来 发表于 2012-9-16 11:41
lz,要是使用break的话,加入C:盘没有文件的话,就跳出for循环了,D盘文件也就没法遍历了,
所以我感觉 ...

说的对,:handshake
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马