2015-04-30 2 views
2

В приведенной ниже программе я сейчас читаю файлы в каталоге. Однако я хотел бы только читать .txt-файлы. Как читать только файлы .text, расположенные в каталоге.Как читать только текстовые файлы в каталоге?

import java.io.*; 

public class Data { 

    public static void main(String[] args) throws IOException { 
     String target_dir = "C:\\Files"; 
     String textfile; 
     File dir = new File(target_dir); 
     File[] files = dir.listFiles(); 

     for (File textfiles : files) { 
      if (textfiles.isFile()) { 

       BufferedReader inputStream = null; 

       try { 
        inputStream = new BufferedReader(new FileReader(textfiles)); 
        String line; 

        while ((line = inputStream.readLine()) != null) { 
         System.out.println(line); 
        } 
       } finally { 
        if (inputStream != null) { 
         inputStream.close(); 
        } 
       } 
      } 
     } 
    } 

} 

ответ

2

Попробуйте проверить расширение

import java.io.*; 

public class Data { 

    public static void main(String[] args) throws IOException { 
     String target_dir = "C:\\Files"; 
     String textfile; 
     File dir = new File(target_dir); 
     File[] files = dir.listFiles(); 

     for (File textfiles : files) { 
      if (textfiles.isFile() && textfiles.getName().endsWith(".txt")) { 

       BufferedReader inputStream = null; 

       try { 
        inputStream = new BufferedReader(new FileReader(textfiles)); 
        String line; 

        while ((line = inputStream.readLine()) != null) { 
         System.out.println(line); 
        } 
       } finally { 
        if (inputStream != null) { 
         inputStream.close(); 
        } 
       } 
      } 
     } 
    } 
} 
+0

Расширение фактически не говорит вам, что находится в файле. – Distjubo

+0

Но он должен захватить все .txt-файлы, которые он хочет. – Ryan

+0

Но ответ @ Distjubo выглядит лучше, чем лучший ответ, хотя это тоже не 100%. –

1

Используйте Files.probeContentPath(), чтобы получить мим файла.

+0

Предполагая, что вы имеете в виду 'Files.probeContentType', это фактически также зависит от расширения файла ...;) – Reimeus

+0

К сожалению, его probeContentPath, а не propeContentPath. derp xD – Distjubo

0

Вы можете использовать FileNameFilter, чтобы сделать это для вас. Ваш код может выглядеть следующим образом:

File[] files = dir.listFiles(new FilenameFilter() {   
     @Override 
     public boolean accept(File dir, String name) { 
      if (name.toLowerCase().endsWith(".txt")) return true; 
      return false; 
     } 
    }); 

Тогда вы знаете, что files содержит только файлы, которые заканчиваются .txt, или любые другие условия, которые вам необходимы.

0

Мне нравится метод DirectoryScanner, который использует ant.jar.

DirectoryScanner scanner = new DirectoryScanner(); 
scanner.setIncludes(new String[]{"**/*.txt"}); 
scanner.setBasedir("C:\\Files"); 
scanner.setCaseSensitive(false); 
scanner.scan(); 
String[] files = scanner.getIncludedFiles(); 

Это от Миши Here. Но, как вы видите, есть много способов сделать это.

3

Вы можете использовать java.io.FilenameFilter для фильтрации файлов в каталоге.

import java.io.*; 

public class Data { 

    public static void main(String[] args) throws IOException { 
     String target_dir = "C:\\Files"; 
     File dir = new File(target_dir); 
     FilenameFilter textFileFilter = new FilenameFilter() { 

      @Override 
      public boolean accept(File dir, String name) { 
       return name.endsWith(".txt"); 
      } 
     }; 
     File[] files = dir.listFiles(textFileFilter); 

     for (File textfiles : files) { 
      if (textfiles.isFile()) { 

       BufferedReader inputStream = null; 

       try { 
        inputStream = new BufferedReader(new FileReader(textfiles)); 
        String line; 

        while ((line = inputStream.readLine()) != null) { 
         System.out.println(line); 
        } 
       } finally { 
        if (inputStream != null) { 
         inputStream.close(); 
       } 
      } 
     } 
    } 
} 

} 
0

Написать метод, который возвращает все .txt файлы в данном каталоге.

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

public class Data { 
     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"); } 
       }); 

      } 
     public static void main(String[] args) throws IOException { 
      String target_dir = "C:\\Files"; 
      String textfile; 
      File dir = new File(target_dir); 
      File[] files = finder(target_dir); 

      for (File textfiles : files) { 
       if (textfiles.isFile() && textfiles.getName().endsWith("txt")) { 

        BufferedReader inputStream = null; 

        try { 
         inputStream = new BufferedReader(new FileReader(textfiles)); 
         String line; 

         while ((line = inputStream.readLine()) != null) { 
          System.out.println(line); 
         } 
        } finally { 
         if (inputStream != null) { 
          inputStream.close(); 
         } 
        } 
       } 
      } 
     } 
    } 
Смежные вопросы