本问题已经有最佳答案,请猛点这里访问。
我正在尝试构建一个解析器,它将从包含100个文本文件的给定路径中获取每个文件,解析每个文件并将每个文件提取的数据保存到内存中的不同文档中。 我怀疑的是如何指定Java从给定位置获取每个文本文件并解析它。 我想构建一个循环,它将检查给定路径中的所有文件夹,选择一个文本文件处理它并移动到下一个位置。
发布尝试以获得更好的帮助。您需要指出您在实施中遇到的具体问题
使用FileVisitor
我建议你将这个任务分解为几个步骤。用英语描述每一步。请注意,当您启动这样的项目时,您应该忽略您将要使用的编程语言。例如,在这种情况下,算法可能如下所示:
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并发布一个特定的问题,包括您到目前为止所尝试的内容。另外一定要写下遇到的确切问题。您应该包含任何相关的错误消息,并描述您希望发生的事情。
使用filevisitor在这里效率很高,java.nio包提供的工具在这里,我为你编写了一个小代码。查看 :
import static java.nio.file.FileVisitResult.*;
public static class ParseFiles extends SimpleFileVisitor {
@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。
首先,获取目录中的文件列表:
File directory = ...;
File[] files = directory.listFiles();
现在,您可以对每个文件执行某些操作:
for (File file : files) {
// do something
}
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
}
}
}