如何在文本文件中附加现有行?如果要编辑的行位于文件中间怎么办?如果给出以下代码,请提供建议。
经历过&尝试了以下内容:
我的代码:
filePath = new File("").getAbsolutePath();
BufferedReader reader = new BufferedReader(new FileReader(filePath + "/src/DBTextFiles/Customer.txt"));
try
{
String line = null;
while ((line = reader.readLine()) != null)
{
if (!(line.startsWith("*")))
{
//System.out.println(line);
//check if target customer exists, via 2 fields - customer name, contact number
if ((line.equals(customername)) && (reader.readLine().equals(String.valueOf(customermobilenumber))))
{
System.out.println ("\nWelcome (Existing User) " + line + "!");
//w target customer, alter total number of bookings @ 5th line of 'Customer.txt', by reading lines sequentially
reader.readLine();
reader.readLine();
int total_no_of_bookings = Integer.valueOf(reader.readLine());
System.out.println (total_no_of_bookings);
reader.close();
valid = true;
//append total number of bookings (5th line) of target customer @ 'Customer.txt'
try {
BufferedWriter writer = new BufferedWriter(new FileWriter(new File(filePath + "/src/DBTextFiles/Customer.txt")));
writer.write(total_no_of_bookings + 1);
//writer.write("\n");
writer.close();
}
catch (IOException ex)
{
ex.printStackTrace();
}
//finally
// {
//writer.close();
//}
}
}
}
答案 0 :(得分:2)
为了能够将内容附加到现有文件,您需要以追加模式打开它。例如,使用FileWriter(String fileName, boolean append)并将true
作为第二个参数传递。
如果该行位于中间,则需要将整个文件读入内存,然后在完成所有编辑后将其写回。
这可能适用于小文件,但如果你的文件太大,那么我建议将实际内容和编辑后的内容写入临时文件,完成后删除旧文件,将临时文件重命名为与旧名称相同。
答案 1 :(得分:1)
reader.readLine()方法每次调用时都会增加一行。我不确定这是否适用于您的程序,但您可能希望将reader.readline()存储为String,因此只调用一次。
要在文本文件的中间添加一行,我相信您必须重新编写文本文件,直到您想要追加该行的位置,然后继续写入文件的其余部分。这可以通过将整个文件存储在String数组中,然后写入某个点来实现。
写作的例子:
BufferedWriter writer = new BufferedWriter(new FileWriter(new File(path)));
writer.write(someStuff);
writer.write("\n");
writer.close();
答案 2 :(得分:1)
您可能应该遵循您发布的第二个链接的答案中的建议。你可以使用random access file访问文件的中间位置,但如果你开始在文件中间的任意位置附加,而不记录你开始写的那些内容,如this answer所述,您将覆盖其当前内容。除非有问题的文件大得多,否则最好的办法是使用现有文件和新数据组装新文件,正如其他人之前建议的那样。
答案 3 :(得分:0)
AFAIK你做不到。我的意思是,附加一条线是可能的,但不能插入中间。这与java或其他语言无关...文件是一个写入字节的序列...如果你在一个任意点插入一些序列不再有效并需要重写的东西。
所以基本上你必须创建一个函数来执行read-insert-slice-rewrite