import java.io.*;public class FindDirectory {
public static void Directory(String dir) throws Exception{
File f = new File(dir);
if(f.isDirectory()){
String[] dirList = f.list();
for(int i=0;i<dirList.length;i++){
Directory(dir+"\\"+dirList[i]);
}
}else{
System.out.println(dir);
}
}

public static void main(String[] args) throws Exception{
Directory("c:");
}}以上的代码会一个 NullPointerException
Exception in thread "main" java.lang.NullPointerException
at FindDirectory.Directory(FindDirectory.java:8)
at FindDirectory.Directory(FindDirectory.java:9)
at FindDirectory.main(FindDirectory.java:19)
但我改成以下这样就没会问题了。
import java.io.*;public class FindDirectory {
public static void Directory(String dir){
try
{
File f = new File(dir);
if(f.isDirectory()){
String[] dirList = f.list();
for(int i=0;i<dirList.length;i++){
Directory(dir+"\\"+dirList[i]);
}
}else{
System.out.println(dir);
}
}
catch(Exception e)
{
System.out.println(e);
}
}

public static void main(String[] args) {
Directory("c:");
}}我对异常的理解
我在函数的后面加上  throws Exception
和我自己加上
try
{
}
catch(Execption e)
{
}
不是一样么,只是一个的自己处理,一个是执给JVM处理
~~~~~~~~~

解决方案 »

  1.   

    哦,原来是对异常还不了解
    不是一样么,只是一个的自己处理,一个是执给JVM处理
    确实是这样,不过你说JVM能帮你做啥呢,大不了就是说哪里有问题出错了,然后就把停掉
      

  2.   

    我明白了~~~~
    我还有个问题~~~
    那来的  NullPointerException  异常
    我的这个程序我是按教程写的~~~~~~
      

  3.   

    自己处理了程序可以继续运行 
    声明了throws Exception,调用它的函数需要对此异常做处理
      

  4.   

    Thanks
    晕,我用别人的机可以运行没错~~~
    别人的机系统是XP
    我的是WIN7
    java 对Win7支持不好??
      

  5.   


    不是,那是WIN7做了手脚好象我机子本来装了XP在C盘,然后我再装WIN7到J盘,双系统,可最后进入WIN7后发现,竟然把我全部的盘符给打乱了,WIN7的系统盘就默认成了C盘,然后我的XP盘。。成了其他盘符这个我只知道这么个现象
      

  6.   


    Directory(dir+"\\"+dirList[i]);
    改为
    Directory(dir+"/"+dirList[i]);试一下