从文件中读取,直到特定的字符序列

时间:2017-09-01 14:02:10

标签: java json file

我有一个JSON文件,如下所示:

map(attributes => Person(attributes(0), attributes(1).trim.toLong))

我想要做的是能够从文件中读取,直到它检测到评论部分的开头“/*”。

我能够编写一些代码,但由于某些原因,输出似乎不正常:

{  
   "id":25,
   "type":0,
   "date":"Aug 28, 2017 12:14:28 PM",
   "isOpen":true,
   "message":"test"
}
/* 
some lines here, comment, not json
*/

输出只给我这个:

BufferedReader br = null;
FileReader fr = null;
String comm = "/*";
fr=new FileReader(FILENAME);
br=new BufferedReader(fr);

String currentLine;

while((currentLine=br.readLine())!=null&&!(currentLine=br.readLine()).equals(comm))
{
    System.out.println(sCurrentLine);
}
br.close();

我没有json部分"id": 25, "date": "Aug 28, 2017 12:14:28 PM", 的开头,也没有整个json消息{"isOpen" ......

如何读取结果并将结果存储在字符串中直到评论部分?

1 个答案:

答案 0 :(得分:2)

您正在调用两次currentLine = br.readLine(),因此请阅读两行。这是人们使用时遇到的同样问题

Scanner sc = new Scanner(System.in);
if (sc.nextLine() != null) // This reads a line
    myString = sc.nextLine(); //This reads the next line!

您不应该第二次调用它 - 直接将您的currentLinecom进行比较。

尝试:

String comm = "/*";
BufferedReader br = new BufferedReader(new FileReader(FILENAME););

StringBuilder sb = new StringBuilder();
String currentLine;

while ((currentLine = br.readLine()) != null && !(currentLine.equals(comm)) {
    //System.out.println(currentLine);
    sb.append(currentLine);
    sb.append("\n");
}
br.close();
System.out.println(sb.toString());

如果你想使用Scanner,那就像是:

StringBuilder sb = new StringBuilder();
Scanner sc = new Scanner(FILENAME);

while (sc.hasNext())
    sb.append(sc.next());
System.out.println(sb.toString());