Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 重置LineNumberReader的计数器_Java_File Io - Fatal编程技术网

Java 重置LineNumberReader的计数器

Java 重置LineNumberReader的计数器,java,file-io,Java,File Io,我正在读取Spool.txt的内容,并根据前四列的代码将其写入一个77行的文本文件 005表示写入第5行 后续1表示写入下一行 2表示写入下一行 3表示写入下一个第三行 问题是,当我试图写入输出文件的第37行时,它从写入的最后一行的计数器继续。我喜欢从文件的开头开始写第37行 我正在使用LineNumberReader跟踪我写入文本文件的行数。我理解setLineNumber(int)实际上不会更改文本文件的当前位置。如何重置计数器,以便从文件开始写入特定行 public static vo

我正在读取Spool.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
publicstaticvoidmain(字符串[]args)引发IOException
{   
文件f=新文件(“file1.txt”);
FileWriter fw=新的FileWriter(f);
BufferedWriter bw=新的BufferedWriter(fw);
LineNumberReader lnr=新的LineNumberReader(新文件读取器(f));
Scanner sc=新扫描仪(新文件(“Spool.txt”);
列表行=新的ArrayList();
while(sc.hasNextLine())
{
line.add(sc.nextLine());
}
字符串[]arrLine=lines.toArray(新字符串[0]);
//System.out.println(arrLine[1]);

对于(int i=0;i您需要以随机访问模式访问文件,这需要另一个类来打开它。即使这样,它也不允许您插入,随机访问模式非常适合替换(并且您需要控制每个元素的大小)


更好的选择是,在写入文件之前,将每一行放入一个数组中,索引作为行号。一旦所有行都存在,迭代数组并按顺序写入行。

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