如何用Java中的新输入替换文本文件的第一行?

时间:2014-07-11 07:36:28

标签: java

我是Java的新手,我正在做一个小程序,以便学习和理解Java。 用户应该能够创建项目,稍后编辑它并添加在其上工作的成员。 所有这些都应该用Java插入到文本文件中(通过控制台)。 我设法创建它并向其添加成员,但编辑它不起作用。

对于编辑,它应该删除前七行并用新输入覆盖它。 文本文件的其余部分不应更改。

我的尝试都结束了整个文件被新输入覆盖。

不确定整个内容是否在一个字符串而不是七个单独的字符串中是否有所不同。

File file = new File("C://Users/Prakt1/Desktop/projektverwaltung.txt");
    String content = ("ID: " + (id) + LINE_SEPARATOR + "Projektname: " + (projektname) + 
    LINE_SEPARATOR + "Beschreibung der Projektaktivitäten: " + (beschreibung) + LINE_SEPARATOR + 
    "Beginn: " + (beginn) + LINE_SEPARATOR + "Ende des Projekts: " + (ende) + LINE_SEPARATOR +  "Dauer des Projekts: "
    + (diffDays) + " Tage" +  LINE_SEPARATOR);  

这个主题可能是重复的(我想在这里打开一个文本文件并编辑java“here”>中的特定行,但是类似问题的答案并没有带我到解决方案中。 对于刚接触Java的人来说,当我更改单行时,很难判断代码是否适合我 或者它完全不同。

非常感谢你的帮助, 克里斯

5 个答案:

答案 0 :(得分:1)

如果你的目标是用新内容替换文件的前七行,并保持文件的其余部分相同,那么只有一种可靠的方法。

  1. 逐行读取整个文件到内存中。这可以是ArrayList或任何其他保留订单的数据结构。

  2. 将7行(数据结构的前7项)更改为您想要新7行的任何内容。

  3. 逐行写出整个文件。

答案 1 :(得分:0)

FileWriter out = new FileWriter(file);
BufferedWriter writer = new BufferedWriter(out);

String data = "Eazy E";

writer.write(data);

说明:FileWriter对象在您的应用程序和文件之间打开一个流。

BufferedWriter实际上是对文件的写入。 不要忘记用writer.close()out.close()关闭每个流(礼仪)。

希望这能回答你的问题

PS:你必须导入这些类。

答案 2 :(得分:0)

您的文件结构与java属性文件非常相似。我建议你使用java.util.Properties类来读写数据。

使用load方法读取您的文件。然后使用setPropertygetProperty方法读取/写入您的数据。最后使用store方法重写文件。

答案 3 :(得分:0)

如果 last 七行而不是 first 七行,则可以在适当的位置截断文件,然后添加新内容,但由于文件数据按从上到下的顺序存储,从文件顶部或中间替换可能长度不同的另一个段的数据段的唯一方法是重写目标段之后的所有内容。您可以替换文件中间的特定字节(使用RandomAccessFile),但仅当替换的字节长度与原始字节完全相同时才会替换。

我会

  • 打开原始文件进行阅读,然后阅读并丢弃前七行
  • 打开一个临时文件进行写入并将新标题写入其中
  • 将任何剩余内容从阅读器复制到作者
  • 关闭两个
  • 重命名临时文件以覆盖原始文件

这样,如果在编写新版本时出现问题,则不会损坏原始文件。

答案 4 :(得分:0)

如果您正在查找某个单词或位置,请使用此处提到的创建和读取文件的步骤(File,FileReader),然后在写入输出之前使用循环(例如; if语句或开关等)与输出进行比较文件(例如.write())。