如何只读取目录中的文本文件?

How can I read only text files in a directory?

在下面的程序中,我正在读取目录中的文件。但是我只想阅读 .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();
                    }
                }
            }
        }
    }

}

尝试检查扩展程序

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

使用 Files.probeContentPath() 获取文件的 mime。

您可以使用 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 结尾的文件,或者您需要的任何其他条件。

我喜欢使用 ant.jar 的 DirectoryScanner 方法。

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

这是来自 Misha Here。但是如您所见,有很多方法可以做到这一点。

您可以使用 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();
                }
            }
        }
    }
}

}

编写一个方法,returns 给定目录中的所有 .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();
                        }
                    }
                }
            }
        }
    }