我试图在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();
}
答案 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
如何覆盖文件中的现有文本?