如何使用Java获取一个文件夹中的所有文本文件?

6
我需要读取文件夹中所有“.txt”文件(用户需选择该文件夹)。
请告知如何操作?

3
这项任务与Spring MVC有何关联? - e-zinc
2
你尝试过什么?你可以在控制器程序中以类似Java的方式完成它。 - Balaswamy Vaddeman
文件夹会在客户端吗? - Manish
@e-zinc:是的,你是对的。我已经更正了主题。 - DmitryB
@Balaswamy Vaddeman:我已经实现了针对单个文件的操作。如何使用标准Windows打开对话框选择目录呢? - DmitryB
@DmitryB 请要求用户在文本框中输入目录名称。 - Balaswamy Vaddeman
5个回答

12

你可以使用FilenameFilter类,它的使用非常简单。

public static void main(String[] args) throws IOException {

        File f = new File("c:\\mydirectory");

        FilenameFilter textFilter = new FilenameFilter() {
            public boolean accept(File dir, String name) {
                return name.toLowerCase().endsWith(".txt");
            }
        };

        File[] files = f.listFiles(textFilter);
        for (File file : files) {
            if (file.isDirectory()) {
                System.out.print("directory:");
            } else {
                System.out.print("     file:");
            }
            System.out.println(file.getCanonicalPath());
        }

    }

只需创建一个filenamefilter实例并覆盖accept方法,以您想要的方式处理即可。


+1 如果你是第一个提到 FilenameFilter 的人。 - Andrew Thompson

2
假设您已经有了目录,您可以像这样操作:
File directory= new File("user submits directory");
for (File file : directory.listFiles())
{
   if (FileNameUtils.getExtension(file.getName()).equals("txt"))
   {
       //dom something here.
   }
}

您可以在此处找到FileNameUtils.getExtension()的相关信息:http://commons.apache.org/io/apidocs/org/apache/commons/io/FilenameUtils.html#getExtension%28java.lang.String%29

编辑:根据这篇之前的SO文章,您似乎想要从Web浏览器访问文件结构。由于安全原因,您所想做的事情是不可能的。


当用户选择一个文件时,将路径传递给文件构造函数,这样就可以工作了。 - Balaswamy Vaddeman
只有在所选文件夹位于服务器端时才能正常工作(但这似乎不是这里的情况)。您无法从服务器端访问客户端上的文件夹。 - Manish
@ManishSharma:关于你的第一点,OP没有指定任何情境...鉴于Spring控制器位于服务器上,假设是OP想要访问服务器端的东西。关于你的第二点,OP没有说明他所做的任何事情。我只是提供了一小段代码,可以完成OP所要求的工作,本站的目的不是为他人的工作付出劳动。 - npinti
@ManishSharma:是否有可能在客户端上完成此操作,而无需将文件复制到服务器? - DmitryB

1

你需要读取目录并在其中进行迭代。

这更多是关于Java访问文件系统的问题,而不是MVC的问题。


1
我写了以下功能,它将搜索目录中的所有文本文件。
public static void parseDir(File dirPath)
    {

        File files[] = null;
        if(dirPath.isDirectory())
        {
            files = dirPath.listFiles();
            for(File dirFiles:files)
            {

                if(dirFiles.isDirectory())
                {
                    parseDir(dirFiles);
                }
                else
                {
                    if(dirFiles.getName().endsWith(".txt"))
                    {
                        //do your processing here....
                    }
                }
            }

        }
        else
        {
            if(dirPath.getName().endsWith(".txt"))
            {
                //do your processing here....
            }
        }

    }

看看这是否有帮助。


1
提供一个文本框让用户输入目录路径。
File userDir=new File("userEnteredDir");
File[] allfiles=useDir.listFiles();

使用 getExtension() 方法迭代 allFiles,以过滤 .txt 文件


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接