在java中传递多个文本文件以进行解析

时间:2014-09-11 17:15:03

标签: java regex

我正在尝试构建一个解析器,它将占用包含100个文本文件的给定路径中的每个文件,解析每个文件并将每个文件提取的数据保存到内存中的不同文档中。我怀疑的是如何指定Java从给定位置获取每个文本文件并解析它。我想构建一个循环,它将检查给定路径中的所有文件夹,选择一个文本文件处理它并移动到下一个位置。

4 个答案:

答案 0 :(得分:1)

我建议您将此任务分解为步骤。用英语描述每一步。请注意,当您启动这样的项目时,您应该忽略您将要使用的编程语言。例如,在这种情况下,算法可能如下所示:

Get directory name from user
For each file in the directory
    Open the file and parse it

当你写出这样的描述时,你经常会得到需要进一步细分的步骤。这些可以(并且应该)作为函数实现。 Get directory name from user是此示例中的一个步骤,Open the file and parse it也是如此。

您应该为每个步骤重复此过程:在单词中描述 如何完成任务。最终,您将达到与编程语言结构几乎完全相同的级别。当你达到这一点时,你可以开始将你的描述翻译成Java或任何其他适当的编程语言。

如果在此过程中的任何时候出现问题,您可以回到SO并发布一个特定问题,包括您在此之前尝试过的内容。另外一定要写下遇到的确切问题。您应该包含任何相关的错误消息,并描述您希望发生的事情。

答案 1 :(得分:0)

File filesDirectory = new File(directory);
File[] files; //holds files in given directory
files = filesDirectory.listFiles();
for(File file:files)
{
//Your code here parse contents of each file individually
//Ex.
     if(!file.isDirectory())
     {
        String fileName = null;
        fileName = file.getPath();
        if(fileName.indexOf(".txt")
        {
          //read contents of each file and store in memory
        }
     }
}

答案 2 :(得分:0)

首先,获取目录中的文件列表:

File directory = ...;
File[] files = directory.listFiles();

现在您可以对每个文件执行某些操作:

for (File file : files) {
    // do something
}

答案 3 :(得分:0)

使用filevisitor在这里效率很高,java.nio包提供的工具在这里,我为你编写了一个小代码。退房:

import static java.nio.file.FileVisitResult.*;

public static class ParseFiles extends SimpleFileVisitor<Path> {

    @Override
    public FileVisitResult visitFile(Path file, BasicFileAttributes attr) {
        if(give your condition if you want to parse file or not) {
            parseFile(file) //I assumed the function to be used to parse file
        }
        return CONTINUE;  // It will make it to recursively search for file
    }
}

现在,您只需要使用Files.walkFileTree开始解析目录中的所有文件。

ParseFiles pf = new ParseFiles();
Files.walkFileTree(basedir, pf); // basedir is String

参考:docs