0

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
4

2 に答える 2

1

実際、テキスト ファイルに挿入することはできません。別のアプローチをお勧めします。読み取り用に 1 つのファイルを開きSpool.txt、書き込み用に別のファイルを開きSpool.txt.write、最初のファイルから読み取って各行を分析し、別のファイルに書き込みます。すべてが完了したら、削除Spool.txtして名前を に変更Spool.txt.writeSpool.txtます。

于 2013-09-25T13:08:36.720 に答える