在特定行的末尾附加文本

时间:2015-03-11 15:39:18

标签: java file append

我试图在java中执行此功能,但它没有工作 我试图在现有的.txt文件中指定行的末尾添加一个新的String(详细说明变量corso具有相同的dati [0]值)。

txt文件的格式如下:

课程标识符1_title of course1_course description1_teacher identifier1 课程标识符2_title当然2_course description2_teacher identifier2

我的问题是如何在行尾添加新的String用户? 我的意思是如何在teacher_identifier之后添加用户?

这是我的功能:

    public void addStudente(String user,String corso) throws IOException{

    FileReader file = new FileReader("C:\\Users\\Marco\\workspace\\ChatRoom\\corsi.txt");
    BufferedReader lettore = new BufferedReader(file);

    FileWriter fileout = new FileWriter("C:\\Users\\Marco\\workspace\\ChatRoom\\corsi.txt",true);
    BufferedWriter filebuf = new BufferedWriter(fileout);
    PrintWriter printout = new PrintWriter(filebuf);

    String temp;
    String[] dati = null;

    while((temp = lettore.readLine()) != null){

        dati = temp.split("_");
        System.out.println("line length: "+lettore.readLine().length());
        if(dati[0].equals(corso)){
            printout.write("_"+user, lettore.readLine().length(),user.length()+1);

        }

    }

    printout.close();
    file.close();


}

3 个答案:

答案 0 :(得分:0)

您需要将您读取的行写入输出,然后编写您的用户,最后写新行。

while(...) {
....
printout.write(temp);
if (...) {
 printout.write("_"+user);
}
printout.println();
}

答案 1 :(得分:0)

首先,你在循环体内多次使用lettore.readLine()。但是你应该知道,这会消耗你的输入流,通过在每次调用时读取下一个可用行。但是你想要每轮只读一行。这是在while谓词中完成的。您将该行存储在temp变量中。在循环体内,您应该只使用此变量,不要再调用readLine()

然后解析该行以确定这是否是添加用户的行。但是else分支没有任何动作。如果这不是要修改的行,则应按原样打印整行:

if(dati[0].equals(corso)){
  // ...
} else {
  printout.println(temp); // Write the unmodified line
}

然后,如果您发现要修改的行,为什么不使用PrintWriter的{​​{1}}和print()方法? 这样的事情就足够了:

println()

答案 2 :(得分:0)

感谢您的帮助,我已根据您的建议修改了我的代码,现在代码正常运行 我使用以下代码:

public void addStudente(String user,String corso) throws IOException{

    FileReader file = new FileReader("C:\\Users\\Marco\\workspace\\ChatRoom\\corsi.txt");
    BufferedReader lettore = new BufferedReader(file);

    FileWriter fileout = new FileWriter("C:\\Users\\Marco\\workspace\\ChatRoom\\corsi.txt",true);
    BufferedWriter filebuf = new BufferedWriter(fileout);
    PrintWriter printout = new PrintWriter(filebuf);

    String temp;
    String[] dati = null;

    while((temp = lettore.readLine()) != null){

        dati = temp.split("_");
        printout.write(temp);

            if(dati[0].equals(corso)){

                printout.write("_"+user);
            }

        printout.println();

    }

    printout.close();
    file.close();
}

代码正确添加用户,但它们不会覆盖文件中的文本。 例如,在运行之前的代码是:

345_title_course_description
456_title1_course1_description1

运行文件后:

345_title_course_description
456_title1_course1_description1
345_title_course_description_user
456_title1_course1_description1

如何覆盖文件中的现有文本?