java - 在java中读取文件超过一行

标签 java file bufferedreader

嘿,

我在逐行读取文件时遇到逻辑问题。我知道你可以用 BufferedReader 来做到这一点,但有时我有用更多行写的“值”,这很重要。

我正在阅读的文件示例:

   <#FIELD NAME = DESC> Some text that goes

        over multiple lines

        which is needed</#FIELD>

    <#FIELD NAME = TEMP> some values are just a single line</#FIELD>

我需要解析字段名称,如上面的 TEMP 或 DESC,然后提取括号 <#FIELD NAME =DESC>important values </#FIELD> 之间的值。但我不太确定在使用 BufferedReader 时如何“识别”条目具有多行值或单值行,然后将其保存到变量中。

我真的很感激任何提示或例子来引导我走向正确的方向!

因为逐行阅读它并没有帮助我取得进展...我不会发布整个代码,因为我认为有一种更简单的方法来阅读它,并且您会了解我所做的事情就这个小片段而言。

if (line.contains("<#FIELD NAME = AUTOR>"))
{
    String autor = line.substring(line.indexOf(">") + 1, line.indexOf("</#"));
    metaData.setAutor(autor.trim());
}
else if (line.contains("<#FIELD NAME = DOKUMENTNR>"))
{
    String dokumentnr = line.substring(line.indexOf(">") + 1, line.indexOf("</#"));
    metaData.setDoukumentnr(dokumentnr.trim());
    ...

最佳答案

尝试类似的事情

public string ReadField(BufferedReader reader) 
{
    string line = reader.readLine();
    while (line.indexOf("</#FIELD>") == -1)
    {
        line += reader.readLine(); // This does not preserve line breaks
    }

    return line;
}

在原始代码中,类似于

string line = ReadField(myReader); // This reads up to the next field

if(line.contains("<#FIELD NAME = AUTOR>")){
   String autor = line.substring(line.indexOf(">")+1,line.indexOf("</#"));
   metaData.setAutor(autor.trim());
} else if(line.contains("<#FIELD NAME = DOKUMENTNR>")) {
   String dokumentnr = line.substring(line.indexOf(">")+1,line.indexOf("</#"));
   metaData.setDoukumentnr(dokumentnr.trim());
}

关于java - 在java中读取文件超过一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13490729/

相关文章:

java - Java Web 应用程序和 Java 企业应用程序有什么区别?

基于外部文件的 C++ 数组

java - telnet 关闭时 BufferedReader 或 Socket 不会引发异常

java - OpenGL ES 2.0/3.0 中有很多对象时出现 alpha 混合问题

java - 使用钱包实例化 Oracle 数据源,无需指定用户名和密码

java - 以编程方式从多个文件添加布局

java - 在文本文件中搜索多行字符串

java - 随机化用Java读取的文本文件

java - 如何在 Java 的嵌套 for 循环中用字母递增值?

c# - 读取文本文件并以内存有效的方式搜索字符串(并在找到时中止)