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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

正常的使用正确的文件夹路径录入时是可以的,但是在使用盘符录入时就会出现空指针异常,这是为什么啊?
输入:  f:\
报错内容:
Exception in thread "main" java.lang.NullPointerException
        at com.heima.lianxi.lianxi7.print(lianxi7.java:41)
        at com.heima.lianxi.lianxi7.print(lianxi7.java:46)
        at com.heima.lianxi.lianxi7.print(lianxi7.java:46)
        at com.heima.lianxi.lianxi7.main(lianxi7.java:15)


代码如下:
package com.heima.lianxi;

import java.io.File;
import java.util.Scanner;

public class lianxi7 {

        /**
         * 从键盘输入接收一个文件夹路径,打印出该文件夹下所有的.java文件名
         */
        public static void main(String[] args) {
                // 1.创建一个File方法接收用户输入的文件夹路径
                File file = getFileName();
                // 2.递归方法查找该路径下所有文件夹并输出
                 print(file);                  
        }

        public static File getFileName() {
                // 创建Scanner对象
                Scanner sc = new Scanner(System.in);
                // 因为需要多次输入,使用while循环
                while (true) {
                        System.out.println("请输入地址值");
                        String line = sc.nextLine();
                        File file = new File(line);
                        // 判断是否存在这个文件夹路径,如果存在再判断是否是文件路径,排除以后就是文件夹路径
                        if (!file.exists()) {
                                System.out.println("您输入的抵制不存在,请重新输入");
                        } else if (file.isFile()) {
                                System.out.println("您输入的是文件地址,请输入文件夹的地址");
                        } else {
                                return file;
                        }
                }
        }

        public static void print(File file) {
                // 获取该路径下所有文件和文件夹
                File[] listFiles = file.listFiles();
                // 遍历判断
                for (File f : listFiles) {
                        // f如果是文件,并且以.java结束就打印,如果是文件夹就递归调用print方法
                        if (f.isFile() && f.getName().endsWith(".java")) {
                                System.out.println(f);
                        } else if (f.isDirectory()) {
                                print(f);                                    ------------------------------------------报错在这里
                        }
                }
        }
}




请大神指教一下

5 个回复

正序浏览
找到答案了,因为这些盘符下面有一些windows的隐藏文件,是没有权限读取的
当读到这个文件夹的时候无法读取返回了null,结果就出现了空指针异常.
也可以try catch把它处理掉也能略过这个问题.
回复 使用道具 举报
我测试了你的代码没问题,不能直接在F盘遍历,输入具体的文件夹就可以了
回复 使用道具 举报
时间虽漫长 发表于 2016-9-11 21:47
别的路径确实没有问题,刚好今天用盘符来读就出问题了. 不是很清楚原因是什么 ...

可能是系统文件的原因吧。没细听
回复 使用道具 举报
yuanxianzhi 发表于 2016-9-11 21:43
你试试不用根目录,之前看的毕老师的视频,c d e 这种根目录有问题。你建个文件夹试试 ...

别的路径确实没有问题,刚好今天用盘符来读就出问题了. 不是很清楚原因是什么
回复 使用道具 举报
你试试不用根目录,之前看的毕老师的视频,c d e 这种根目录有问题。你建个文件夹试试
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马