2016-04-16 4 views
0

私のアプリのプライベートfilesdirの各ファイルの最初の行を読みたいと思います。 私は、次のコードを使用しています:Android - getFilesDir()。lstFiles()はnullを返しますか?

String[] f ={}; 
    File[] files = con.getFilesDir().listFiles(); 
    for (int i = 0; i<=files.length-1; i++){ 
     try { 
      FileInputStream in = con.openFileInput(files[i].getName()); 
      BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
      f[i]=br.readLine(); 
      br.close(); 
      in.close(); 
     }catch(Exception e){ 
      Log.e("File input reading", e.getMessage()); 
     } 
    } 
    return f; 

Logcatは常に言う、 "E /ファイル入力の読み取り:長さ= 0;インデックス= 0" - LISTFILESは、()はnullを返したため、ファイルの配列の長さは、0であることを意味ししかし、このディレクトリには確かにファイルがあります。なぜそれがlistfiles()によって認識されないのですか?


EDIT: 私はこのコードでそれを解決:

public static String[] GetFiles(Context con){ 
    File[] files = con.getFilesDir().listFiles(); 
    String[] f = new String[files.length]; 
    for(int i=0; i<files.length; i++){ 
     f[i] = getFirstLine(files[i], con); 
    } 
    return f; 
} 

public static String getFirstLine(File f, Context con){ 
    String ret ="error"; 
    try { 
     FileInputStream in = con.openFileInput(f.getName()); 
     BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
     ret = br.readLine(); 
     br.close(); 
     in.close(); 
    }catch(Exception e){ 
     Log.e("File input reading", e.getMessage()); 
    } 
    return ret; 
} 

をそれはアプリのプライベートFILESDIR内の各ファイルのうち最初の行を読み取ります。

答えて

0

LISTFILES()がnull

を返したため、いいえ、それはしませんでした。それ以外の場合はfiles.lengthを実行するとNullPointerExceptionになります。

Logcatは常に言う、 "E /ファイル入力の読み取りを:長さ= 0;インデックス= 0"

あなたLog呼び出しがあった場合には役立つだろう:

Log.e("SomeIdentifyingTag", "File input reading", e); 

次に、あなたが希望Javaスタックトレースと例外の詳細を参照してください。

一つのバグはここにある:

f[i]=br.readLine(); 

fは長さゼロの配列です。要素を持たないので、要素のどれにも何も割り当てることはできません。 fの要素数をfilesと同じにする場合は、filesを初期化した後で、をnew String[files.length]として初期化する必要があります。

もう1つのバグは、files[i]がファイルかディレクトリかどうかを確認していないことです。 IIRC、listFiles()は、.および..のような仮想ディレクトリを含むディレクトリを返すことができます。

+0

答えに感謝します。私はあなたのヒントを配列の初期化に使用しました。私のソリューションでは上記の私の編集を見ることができます。 (btw、私はそのファイルやディレクトリしかないので、そのファイルやディレクトリがあるかどうかを確認する必要はありません) – purpule

関連する問題