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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马林康 中级黑马   /  2012-6-28 14:03  /  2086 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 马林康 于 2012-6-28 14:28 编辑

想列出所有磁盘下的文件名 代码如下
  1. public class FileDemo3 {
  2.         public static void main(String[] args){
  3.                 File[] files =File.listRoots();
  4.                 for(File file:files){
  5.                         System.out.println(file);
  6.                         String[] filenames =file.list();
  7.                         for(String filename:filenames){
  8.                                 System.out.println(filename);
  9.                         }
  10.                 }
  11.         }

  12. }
复制代码
但是通过listRoot方法 也列出了驱动器 ,驱动器里没文件 报空指针异常 怎么解决?

6 个回复

倒序浏览
我运行没问题,楼看下自己是不是导包了
import java.util.*;
还有如果只是一个单独的Java文件就把class前面的public,然后再试试
回复 使用道具 举报
  1. import java.io.File;
  2. class FileDemo3 {
  3.         public static void main(String[] args) {
  4.                 File[] files = File.listRoots();
  5.                 String[] filenames = null;
  6.                 for (File file : files) {
  7.                         //System.out.println(file);
  8.                         filenames = file.list();
  9.                         if(filenames!=null)
  10.                         for (String filename : filenames) {
  11.                                 if (filename!=null)
  12.                                 System.out.println(filename);
  13.                         }
  14.                 }
  15.         }
  16. }
复制代码
高级for循环,当下一个值为null的时候也会被赋值,
你只需要判断下返回值可不可能为空就行了

点评

检测空指针是不推荐的,代码复杂的时候,你怎么知道是不是它引起的空指针?  发表于 2012-6-28 17:44
回复 使用道具 举报
既然出现看异常我们可以尝试着
try{
}catch(需要处理的异常){
处理方式:
}
下面是我写的简单的处理方式
package Test_1;
import java.io.File;
public class FileDemo3 {
    public static void main(String[] args){
     File[] files=null;
      files =File.listRoots();
            for(File file:files){
                    System.out.println(file);
                    String[] filenames =file.list();
                    try{
                     for(String filename:filenames){
                            System.out.println(filename);
                     }
                }catch( java.lang.NullPointerException e){
                 System.out.println("磁盘为空");
                }
                    
            }
    }
}

点评

检测空指针是不推荐的,代码复杂的时候,你怎么知道是不是它引起的空指针?  发表于 2012-6-28 17:44
回复 使用道具 举报
if(file.canExecute()){
         String[] filenames =file.list();
         for(String filename:filenames){
        System.out.println(filename);
         }
}
这样就行了,可能因为你的电脑有个G盘吧,就是DVD驱动器,所以会报个空异常
回复 使用道具 举报
public class FileDemo3 {
        public static void main(String[] args){
                File[] files =File.listRoots();
                for(File file:files){
                                              if(!file.exists())
                                                  continue;   
     //加上这个判断语句,如果此路径名表示的文件或目录不存在,则进行下一次循环               
                           System.out.println(file);
                        String[] filenames =file.list();
                        for(String filename:filenames){
                                System.out.println(filename);
                        }
                }
        }

}

评分

参与人数 1技术分 +1 收起 理由
刘蕴学 + 1

查看全部评分

回复 使用道具 举报
李伟 发表于 2012-6-28 14:56
public class FileDemo3 {
        public static void main(String[] args){
                File[] file ...

嗯,师者,传道授业解惑.....
学习了..
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马