Spool.txt の内容を読み取り、最初の 4 列のコードに基づいて 77 行のテキスト ファイルに書き込みます。
- 005 は 5 行目に書き込むことを意味します
- 後続の 1 は、次の行に書き込むことを意味します
- 2 は、次の 2 行目に書き込むことを意味します
- 3 は、次の 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