Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

再帰処理について

はじめまして。oinkと申します。
javaを初めて1ヶ月なんですが、再帰処理がうまくいきません。
Cドライブにある全てのファイルをコンソールに表示したいのですが、途中で強制的に終了されてるっぽいです。原因はなんでしょうか?(表示するのはファイル名ではなくファイルのフルパスを表示)

エラーメッセージ:
Exception in thread"main"java.lang.NullPointerException
 at test.ref(test.java:10)
 at test.ref(test.java:13)
 at test.main(test.java:6)

ソース:
import java.io.File;

public class Test {
 public static void main(String[] args) {
  File dir = new File("C:\\");
  ref(dir);
 }
 static void ref(File dir) {
  String[] mdir = dir.list();
   for (int i=0; i < mdir.length; i++) {
    File sdir = new File(dir, mdir[i]);
     if (sdir.isDirectory()) {
      ref(sdir);
     }
     else {
      System.out.println(sdir.getPath());
     }
   }
 }
}

どなたか原因についてご存知でしたら教えて下さい。

3

回答

6922

閲覧

3件の回答

評価

0

Exception in thread"main"java.lang.NullPointerException
 at test.ref(test.java:10)
 at test.ref(test.java:13)
 at test.main(test.java:6)

↑これを見ると大抵のエラーの原因が判ります。

今回はNullPointerExceptionがエラーで、発生箇所はtest.javaの10行目です。

    for (int i=0; i < mdir.length; i++) {

この行でNullPointerExceptionが発生するのはmdir.lengthの
mdirがnullの時だけです。そうすると、

String[] mdir = dir.list();

の dir.list() がnullを返しているためだと判ります。
具体的に回避する方法としては二通りで、即座にreturnで戻るか、nullチェックのif文を追加するかです。

評価

0

ご回答ありがとう御座いました。

ご指摘どおり、nullチェックを入れてみて実行してみたらNullPointerExceptionのエラーメッセージが表示されなくなりました。ありがとうございました。
(追加:10,11,12行目)

import java.io.File;

public class lll {
 public static void main(String[] args) {
  File dir = new File("C:\\swsetup");
  ref(dir);
 }
 static void ref(File dir) {
  String[] mdir = dir.list();
    
   //nullチェック
  if (mdir == null) {
   return;
  }

   for (int i=0; i < mdir.length; i++) {
    File sdir = new File(dir, mdir[i]);
     if (sdir.isDirectory()) {
      ref(sdir);
     }
     else {
      System.out.println(sdir.getPath());
     }
   }
 }
}

評価

0

すいません。
ちがったソースを貼り付けてしまいました。
再度、書き込ませて頂きます m(_ _;)m

import java.io.File;

public class Test {
 public static void main(String[] args) {
  File dir = new File("C:\\");
  ref(dir);
 }
 static void ref(File dir) {
  String[] mdir = dir.list();

       // nullチェック
       if (mdir == null) {
     return;
       }

   for (int i=0; i < mdir.length; i++) {
    File sdir = new File(dir, mdir[i]);
     if (sdir.isDirectory()) {
      ref(sdir);
     }
     else {
      System.out.println(sdir.getPath());
     }
   }
 }
}

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。