java重置LineNumberReader的计数器
我正在读线轴的内容。txt并根据前四列的代码将其写入77行文本文件
- 005表示写入第5行
- 后续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
# 1 楼答案
您需要以随机访问模式访问该文件,这需要其他类来打开它。即使这样,它也不允许您插入,随机访问模式非常适合替换(并且您需要控制每个元素的大小)
更好的选择是,在写入文件之前,将每一行放入一个数组中,索引作为行号。一旦所有的行都存在,迭代数组并按顺序写入行
# 2 楼答案
事实上,您无法插入到文本文件中。我建议另一种方法。 打开一个文件以读取
Spool.txt
,打开另一个文件以写入Spool.txt.write
,然后从第一个文件中读取、分析每一行并写入另一个文件。完成所有操作后,只需删除Spool.txt
并将Spool.txt.write
重命名为Spool.txt