gpt4 book ai didi

java - 重置 LineNumberReader 的计数器

转载 作者:行者123 更新时间:2023-12-01 14:04:41 29 4
gpt4 key购买 nike

我正在读取 Spool.txt 的内容,并根据前四列的代码将其写入 77 行文本文件。

  • 005 表示写入第 5 行
  • Subsequent 1 表示写入下一行
  • 2 表示写入下一个第二行
  • 3 表示写入下一个第三行

问题是当我尝试写入输出文件的第 37 行时,它从最后写入的行的计数器继续。我喜欢从文件开头开始写入第 37 行。

我使用 LineNumberReader 来跟踪我写入文本文件的行数。据我所知, setLineNumber(int) 实际上并没有改变文本文件的当前位置。如何重置计数器以便可以从文件开头写入特定行?

public static void main(String[] args) throws IOException 
{
File f= new File("file1.txt");
FileWriter fw = new FileWriter(f);

BufferedWriter bw = new BufferedWriter(fw);
LineNumberReader lnr = new LineNumberReader(new FileReader(f));

Scanner sc = new Scanner(new File("Spool.txt"));
List<String> lines = new ArrayList<String>();

while (sc.hasNextLine())
{
lines.add(sc.nextLine());
}

String[] arrLine = lines.toArray(new String[0]);

//System.out.println(arrLine[1]);

for (int i=0;i<arrLine.length;i++)
{
String s1=arrLine[i].toString();
String s2= s1.substring(0,4);

if (s2.trim().equals("005"))
{
try
{
lnr.setLineNumber(4);
for(int j=1;j<=lnr.getLineNumber();j++)
bw.newLine();
bw.write(arrLine[i]);
}
catch (IOException e)
{
e.printStackTrace();
}
}
else if (s2.trim().equals("1"))
{
try
{
lnr.setLineNumber(1);
for(int j=1;j<=lnr.getLineNumber();j++)
bw.newLine();
bw.write(arrLine[i]);
}
catch (IOException e)
{
e.printStackTrace();
}

}
else if (s2.trim().equals("2"))
{
try
{
lnr.setLineNumber(2);
for(int j=1;j<=lnr.getLineNumber();j++)
bw.newLine();
bw.write(arrLine[i]);
}
catch (IOException e)
{
e.printStackTrace();
}
}

else if (s2.trim().equals("3"))
{
try
{
lnr.setLineNumber(3);
for(int j=1;j<=lnr.getLineNumber();j++)
bw.newLine();
bw.write(arrLine[i]);
}
catch (IOException e)
{
e.printStackTrace();
}

} // END Else If Loop

else if (s2.trim().equals("37")) **//ISSUE STARTS HERE: I'm trying to write to Line 37 counting from the start of the file again. It is writing to Line 37 starting from the previous lines written above**
{
try
{
lnr.setLineNumber(37);
for(int j=1;j<=lnr.getLineNumber();j++)
bw.newLine();
bw.write(arrLine[i]);
}
catch (IOException e)
{
e.printStackTrace();
}

} // END Else If Loop

}
bw.close();
lnr.close();
} //main
} //class

最佳答案

事实上,您无法插入到文本文件中。我建议采用另一种方法。您打开一个文件用于读取Spool.txt,另一个文件用于写入Spool.txt.write,然后从第一个文件中读取分析每一行并写入另一个文件。完成所有操作后,只需删除 Spool.txt 并将 Spool.txt.write 重命名为 Spool.txt

关于java - 重置 LineNumberReader 的计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19005624/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com