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