JAVA:从文本文件中获取特定字符串的内容

时间:2014-04-13 14:02:15

标签: java file

我有一个text这样的文件:

  text
  text
  text
  .
  .
  @data
  instances1
  instances2
  .
  .
  instancesN

我想从@data获取此文件的内容,直到文件结束,我该怎么办?

我找到了FileUtils(来自apache commons-lang)类的这种方法,但只有在我已经知道行号时它才可用。

String ln = FileUtils.readLines(new File("arff_file/"+results.get(0)))
    .get(lineNumber);

3 个答案:

答案 0 :(得分:2)

由于您使用的是Apache Commons,因此可以在一行中完成:

String contents = FileUtils.readFileToString(new File("arff_file/"+results.get(0)), "UTF-16").replaceAll("^.*?(?=@data)", "");

这适用于

  • 将整个文件读入单个字符串
  • 使用基于正则表达式的replaceAll()删除(通过替换为空白)所有内容,但不包括@data

^.*?(?=@data)的正则表达式细分为:

  • ^输入开始
  • .*?一个不情愿量化的通配符
  • (?=@data)一个肯定的(非消费的)前瞻声明下一个输入是@data

不情愿的量词可能很重要,因此它不会跳过第一个@data,以防它在输入中出现多次。

答案 1 :(得分:1)

try {
String file = "fileName";
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
while ((line = br.readLine()) != null) {
    if (line.equals("@data"))
        nowRead(br);//I just do this for more efficiency, you can set a boolean flag instead
}
br.close();
}catch (IOException e) {
    //OMG Exception again!
}
}

static ArrayList<String> nowRead(BufferedReader br) throws IOException {
    ArrayList<String> s = new ArrayList<String>();// do it as you wish
    String line;
    while ((line = br.readLine()) != null) {
        s.add(line);
    }
    return s;
}

答案 2 :(得分:0)

Path start = Paths.get("test.txt");
try
{
    List<String> lines = Files.readAllLines(start);

    for (Iterator<String> it = lines.iterator(); it.hasNext();)
    {
        String line = it.next();

        if (!"@data".equals(line.trim()))
        {
            it.remove();
        }
        else
        {
            break;
        }
    }

    System.out.println(lines);
}
catch (IOException e)
{
    e.printStackTrace();
}

我正在网上阅读关于Path的内容,那么为什么不这样的东西可以替代波希米亚代码呢?

也许可以使用Java 8的stream()完成某些事情,但仍然没有...