读取并删除文件中的 X 行

10 浏览
0 Comments

读取并删除文件中的 X 行

我有一个文件,大约有45,000行,内容如下:

randomline
ernegvggvdr
dsvdfssvdsv
dfsfvfvs
svdfsdfdfs
dfsfvfv
dsvvsvvfggd

我想读取前100行并删除它们。我知道以下代码可以读取文件的全部内容:

Files.readAllBytes(new File(new File("").getAbsolutePath() + "lines.txt").toPath());

我还知道以下代码可以删除整个文件:

new File(new File("").getAbsolutePath() + "line.txt").delete();

然后,可以使用以下代码重新创建一个空文件:

new File(new File("").getAbsolutePath() + "line.txt").createNewFile();

但是,所有这些操作都是针对整个文件而不是前X行。

0
0 Comments

问题:从文件中读取并删除X行的原因是什么?该问题的解决方法是什么?

在Java中,如果你需要从文件中读取并删除X行的内容,可以使用UNIX实用工具(如head和tail)来轻松实现。但是,如果你想在Java中逐行读取和写入文本文件,你需要学习使用BufferedReader、PrintWriter等。

问题的原因是,Java中没有直接提供一种简单的方法来读取文件的特定行数,并且删除这些行。因此,需要使用一些其他的方法来实现这个功能。UNIX实用工具提供了一种简单的方法来读取文件的特定行数,但这对于需要在Java中进行其他操作的开发人员来说可能不是最佳选择。

为了解决这个问题,可以使用Java的输入/输出流和缓冲区类来逐行读取和写入文本文件。BufferedReader类可以用来读取文件的内容,并将其保存到缓冲区中。通过使用读取到的内容,可以找到需要删除的行,并将其从缓冲区中删除。然后,使用PrintWriter类将缓冲区中剩余的内容写回文件中,从而实现从文件中读取并删除X行的功能。

在Java中,如果需要从文件中读取并删除X行的内容,可以使用UNIX实用工具(如head和tail)来轻松实现。但是,如果你想在Java中逐行读取和写入文本文件,需要学习使用BufferedReader、PrintWriter等的方法。问题的原因是Java中没有直接提供一种简单的方法来实现这个功能。解决这个问题的方法是使用Java的输入/输出流和缓冲区类来逐行读取和写入文本文件,并通过使用缓冲区类来删除需要删除的行,最后将剩余的内容写回文件中。

0
0 Comments

文件是一个一维字节数组,无法直接删除开头的内容。相反,需要通过复制数据来填充空白部分。此外,文件本身是完全无结构的。它并不知道它有多少行文本。我们约定每个换行符\n之后,表示开始了一行新的文本。

如果想要将以下文件内容:

the first line
the second line
the third line
the fourth line
the fifth line

转换为以下文件内容:

the third line
the fourth line
the fifth line

你需要确定要跳过的字节数(在本例中是第31个字节),然后将其后的所有字节向前移动相应的字节数。在Java中,可以使用内存映射文件来高效完成此操作(参见FileChannel),但这并不是一项简单的任务。

相反,你可以将文件视为流并将其写入另一个文件。然后,最终可以将新文件重命名为旧文件以覆盖它。如果你有足够的磁盘空间(你有的,对吧?),这是最简单的方法。

以下是解决该问题的一种方法:

- 打开输入文件,并为其创建一个BufferedReader

- 打开输出文件。

- 对于输入文件的前n行,重复以下步骤:

- 什么都不做。

- 对于输入文件的剩余所有行,重复以下步骤:

- 将该行写入输出文件。

- 关闭两个文件。

这样就可以实现删除文件中的前n行的操作。

0