2015-11-19 6 views
5

Итак, я изучаю рекурсию прямо сейчас, и я знаю, как получить максимальный размер файла в папке, выбранной в JFileChooser.Попытка получить имя файла самого большого файла

Я просто не могу для жизни меня не могу понять, как получить имя этого файла после его обнаружения. Вот способ получения наибольшего файла FileSize. Как мне получить имя этого файла?

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() 

Поскольку это непрактично возвращать как размер файла и имя, почему бы не вернуть файл, а затем получить его размер и имя от этого?

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: Возвращает самый большой File в любом из подкаталогов. Возвращает 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(); 
Смежные вопросы