2015-11-19 3 views
5

今、私は再帰を学習しており、JFileChooserで選択されたフォルダで最大のファイルサイズを取得する方法を知っています。最大ファイルのファイル名を取得しようとしています

私の人生のために私はちょうどそれが見つかった後にそのファイルの名前を取得する方法を見つけることができませんできません。最大ファイルサイズを取得する方法は次のとおりです。そのファイルの名前をどうやって取得するのですか?

public static long largestFileSize(File f) { 
    if (f.isFile()) { 
     return f.length(); 
    } else { 
     long largestSoFar = -1; 

     for (File file : f.listFiles()) { 
      largestSoFar = Math.max(largestSoFar, largestFileSize(file)); 
     } 
     return largestSoFar; 
    } 
} 

答えて

6
String fileName = file.getName() 

それはファイルのサイズと名前の両方を返すために非現実的なので、なぜあなたはファイルを返却して、そこからそのサイズと名前を得ることはありませんか?サブディレクトリのいずれかに戻り最大File

public static File largestFile(File f) { 
    if (f.isFile()) { 
     return f; 
    } else { 
     File largestFile = null; 

     for (File file : f.listFiles()) { 
      // only recurse largestFile once 
      File possiblyLargeFile = largestFile(file); 
      if (possiblyLargeFile != null) { 
       if (largestFile == null || possiblyLargeFile.length() > largestFile.length()) { 
        largestFile = possiblyLargeFile; 
       } 
      } 
     } 
     return largestFile; 
    } 
} 

そして、あなたはこれを行うことができます。

String largestFileName = largestFile(file).getName(); 
long largestFileSize = largestFile(file).length(); 

EDIT。サブディレクトリにファイルが存在しない場合はnullを返します。

+0

が...それはまた、最大のファイルを含むディレクトリを返すことができます! –

+0

'!isDirectory()'を追加しました。ありがとう! – jiaweizhang

+0

しかし、ディレクトリに含まれている最大のファイルは無視されます。 –

1

はちょうどその呼び出し

public static File largestFile(File f) { 
    if (f.isFile()) { 
     return f; 
    } else { 
     long largestSoFar = -1; 
     File largestFile = null; 
     for (File file : f.listFiles()) { 
      file = largestFile(file); 
      if (file != null) { 
       long newSize = file.length(); 
       if (newSize > largestSoFar) { 
        largestSoFar = newSize; 
        largestFile = file; 
       } 
      } 
     } 
     return largestFile; 
    } 
} 

の操作を行います。常に最大のファイルを返しません

largestFile(myFile).getName(); 
関連する問題