从java中的大文件中提取特定文本

时间:2013-12-15 13:27:03

标签: java

我的文件包含像这样的模式文本

Type:status
Origin:some text
Text:some text
URL:some url
Time:time

大约500行,具有相同的模式。我想只从中提取文本部分。我尝试使用BufferedReader阅读该文件并使用indexOf("Text")indexOf("URL")以及subString(i,j),但在运行时给出了异常。我怎样才能做到这一点。我的代码:

 FileReader fr = new FileReader("test.txt");
 BufferedReader br = new BufferedReader(fr);

 FileWriter wr = new FileWriter("new.txt");
 //  char buffer[] = null;
 String s;
 String str="";
 BufferedWriter bw = new BufferedWriter(wr);
 while ((s = br.readLine()) != null) {
     str= str + s;
     i = str.indexOf("Text:");
     j= str.indexOf("URL:");
     String a= str.substring(i, j);
     bw.write(a);
 }
 br.close();
 bw.close();

3 个答案:

答案 0 :(得分:0)

您可以使用

String[] pieces = str.split(":");

这将为您提供一系列字符串,这些字符串按您放在括号中的内容进行拆分。然后,如果您知道模式,您可以通过循环迭代来获取每个部分。例如:如果您知道Type在[0]并且每个序列中有6个东西,您可以说下一个Type将在[6],依此类推。

答案 1 :(得分:0)

您应该检查索引。 ij。如果一行错误,它将跳过它并打印控制台错误的行。您应该以不同的方式处理它,但请记住,子字符串不应该喜欢-1的索引。

 FileReader fr = new FileReader("test.txt");
 BufferedReader br = new BufferedReader(fr);

 String tokenText = "Text:";
 String tokenURL = "URL:";

 FileWriter wr = new FileWriter("new.txt");
 //  char buffer[] = null;
 String s;
 String str="";
 BufferedWriter bw = new BufferedWriter(wr);
 while ((s = br.readLine()) != null) {
     String a;
     str = str + s;

     i = str.indexOf(tokenText);
     j = str.indexOf(tokenURL);

     if (i < 0 && j >= 0){
        // pad with the token string
        a = s.substring(j + tokenURL.length);
     } else if(i >= 0) {
        // pad with the token string
        a = s.substring(i + tokenText.length);
     } else {
        System.out.printl("Unparsed line:");
        System.out.printl(s);
     }

     bw.write(a);
 }
 br.close();
 bw.close();

那就是说,正如jonhchen902在评论中所说,你也可以在while循环之后检查字符串。这实际上取决于您的输入文件,以及您是否希望多次或一次找到“字符串”。

答案 2 :(得分:0)

"Text:"位于第3行,"URL:"位于第4行,但如果您的程序找不到两个字符串,则会抛出异常。 即使它有效,你也会一遍又一遍地找到相同的文字。 尝试这样的事情:

FileReader fr = new FileReader("test.txt");
BufferedReader br = new BufferedReader(fr);

FileWriter wr = new FileWriter("new.txt");
String s;
BufferedWriter bw = new BufferedWriter(wr);
while ((s = br.readLine()) != null) {
    if (s.startsWith("Text:"))
        bw.write(s);
}
br.close();
bw.close();