【问题标题】:Passing multiple text files in java for the purpose of parsing [duplicate]在java中传递多个文本文件以进行解析[重复]
【发布时间】:2014-09-11 17:15:02
【问题描述】:

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

【问题讨论】:

  • 发布尝试以获得更好的帮助.. 您需要指出您在实施中面临的具体问题
  • 为此使用FileVisitor

标签: java regex


【解决方案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 并发布一个具体问题,包括您迄今为止尝试过的内容。还请务必写下遇到的确切问题。您应该包含任何相关的错误消息并描述您期望发生的情况。

【讨论】:

    【解决方案2】:
    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
            }
         }
    }
    

    【讨论】:

      【解决方案3】:

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

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

      现在你可以对每个文件做一些事情了:

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

      【讨论】:

        【解决方案4】:

        这里使用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.

        【讨论】:

          猜你喜欢
          • 2014-06-26
          • 1970-01-01
          • 1970-01-01
          • 2013-04-30
          • 1970-01-01
          • 2014-11-22
          • 1970-01-01
          • 1970-01-01
          • 2012-02-14
          相关资源
          最近更新 更多