2017-08-11 57 views
-1

我有几个这种格式的txt文件,我需要阅读它们并收集信息。Java如何使用BufferedReader以这种格式读取txt文件

FILE1.TXT: enter image description here FILE2.TXT: enter image description here

我只是想读“文件”部分,它可以通过“文件”保存为一个字符串,及其所有子内容另一串。

(例如,在FILE1.TXT :)

String file = "file"; 

我想写一个for循环读取所有的子内容,并保存到另一个字符串如:

for (int i = 0; i < numberOfSubcontentLines; i++){ 
    sub = sub + br.readLine() + ", "; 
} 

对我来说困难是不同的txt文件有不同的子内容行,我不知道如何阅读这些行,以便该方法可以在两种情况下工作。

目前代码我想:

public void readFile(String fileLocation) throws IOException { 
    fileMap = new HashMap<>(); 
    FileReader reader = new FileReader(fileLocation); 
    BufferedReader br = new BufferedReader(reader); 
    String line; 
    String file; 
    // Assign a temp value to save the sub-content 
    String temp = ""; 
    while ((line=br.readLine()) != null) { 
     if(line.contains("file")){ 
      file = "file"; 
      // Skip the next line 
      br.readLine(); 
      // save all the sub-contents 
      do { 
       temp = temp + br.readLine() + ", "; 
      } while(br.readLine().contains("****")); 
     } 
    } 
    fileMap.put(file, temp); 
    System.out.println(fileMap); 
} 

它没有得到我想要的东西。任何建议或想法? Tkx在先进。

+0

大概,你正在写一个方法。该方法的输入是什么? (我猜的是文件名,但另一部分可能是文件的“部分”名称,在你的例子中,这可能是“文件”,但如果你想读取它也可能是“苹果” “苹果”部分)。什么是期望的输出?关于文件格式可以假定什么? –

+0

最适合您首先尝试自己编写此代码,尝试使用代码并尝试使用工作程序。如果失败了,那么你可以问一个更具体的问题,向我们展示这个代码尝试(一个完整的小型可编译和可运行程序)。如果没有这种尝试,你的问题就会转化为对代码的请求,这是不允许的。我敢肯定,考虑到你的知识和技能,你可以通过一次体面的尝试来解决这个问题,也可以非常接近解决方案(还有很多写在纸上的代码流的逻辑)。 –

+0

你正在太多不同的地方阅读,并且无法正确处理事情。相反,您需要创建一个状态机 - 一个用于读取行的while循环(不是读取行的一堆位置,然后将行馈送到状态机,该状态机将以各种方式处理行,具体取决于它的状态*。 –

回答

1

你想创建和使用一个状态机,一个持有状态的对象(一个枚举或布尔值可以用于此目的),给出每行文本,然后根据其状态处理每一行。码流的示意图看起来是这样的:

enter image description here

其他州可以包括输入或文件结束。
关键的一点是,该行只能在while循环中的某一点读取,然后该循环将文本传递到处理它的代码的其他部分。

+0

感谢您的解释,我将尝试以这种方式工作,看看我能否解决它。 –