Java: Найдите .txt файлы в указанной папке [закрытыми]

Интерфейсы обычно используются, когда Вы хотите определить поведение, которое могут показать объекты.

А хороший пример этого в мире.NET интерфейс IDisposable, который используется на любых классах Microsoft, которые используют системные ресурсы, которые должны быть вручную выпущены. Это требует, чтобы класс, реализовывая его имел Расположение () метод.

(Расположение () метод также называет конструкция языка использования для VB.NET и C#, который только работает над IDisposable, s)

Имеет в виду, что можно проверить, реализует ли объект определенный интерфейс при помощи конструкций такой как TypeOf ... Is (VB.NET), is (C#), instanceof (Java), и т.д.

52
задан Hash 24 August 2016 в 00:53
поделиться

3 ответа

Вы можете использовать метод listFiles () , предоставляемый классом java.io.File .

import java.io.File;
import java.io.FilenameFilter;

public class Filter {

    public File[] finder( String dirName){
        File dir = new File(dirName);

        return dir.listFiles(new FilenameFilter() { 
                 public boolean accept(File dir, String filename)
                      { return filename.endsWith(".txt"); }
        } );

    }

}
123
ответ дан 7 November 2019 в 09:00
поделиться

Вот код моей платформы (unix)

public static List<File> findFiles(String dir, String... names)
    {
        LinkedList<String> command = new LinkedList<String>();
        command.add("/usr/bin/find");
        command.add(dir);
        List<File> result = new LinkedList<File>();
        if (names.length > 1)
            {
                List<String> newNames = new LinkedList<String>(Arrays.asList(names));
                String first = newNames.remove(0);
                command.add("-name");
                command.add(first);
                for (String newName : newNames)
                    {
                        command.add("-or");
                        command.add("-name");
                        command.add(newName);
                    }
            }
        else if (names.length > 0)
            {
                command.add("-name");
                command.add(names[0]);
            }
        try
            {
                ProcessBuilder pb = new ProcessBuilder(command);
                Process p = pb.start();
                p.waitFor();
                InputStream is = p.getInputStream();
                InputStreamReader isr = new InputStreamReader(is);
                BufferedReader br = new BufferedReader(isr);
                String line;
                while ((line = br.readLine()) != null)
                    {
                        // System.err.println(line);
                        result.add(new File(line));
                    }
                p.destroy();
            }
        catch (Exception e)
            {
                e.printStackTrace();
            }
        return result;
    }
-2
ответ дан 7 November 2019 в 09:00
поделиться

Попробуйте:

List<String> textFiles(String directory) {
  List<String> textFiles = new ArrayList<String>();
  File dir = new File(directory);
  for (File file : dir.listFiles()) {
    if (file.getName().endsWith((".txt"))) {
      textFiles.add(file.getName());
    }
  }
  return textFiles;
}

Вы хотите выполнить поиск без учета регистра, в котором case:

    if (file.getName().toLowerCase().endsWith((".txt"))) {

Если вы хотите рекурсивно искать текстовые файлы в дереве каталогов, вы должны иметь возможность адаптировать приведенное выше как рекурсивную или итеративную функцию с использованием стека.

22
ответ дан 7 November 2019 в 09:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: