当前位置: 首页 > 知识库问答 >
问题:

如何在 Java 中写入 txt 文件中的特定行号

吴品
2023-03-14

我目前正在为学校写我的项目,要求我读写txt文件。我可以正确地读取它们,但是我只能从附加的FileWriter写入它们的末尾。我希望能够通过首先删除行上的数据,然后写入新数据,来覆盖我的txt文件中行号上的内容。我试图使用这种方法...

public void overWriteFile(String dataType, String newData) throws IOException
{
    ReadFile file = new ReadFile(path);
    RandomAccessFile ra = new RandomAccessFile(path, "rw");
    int line = file.lineNumber(path, dataType);
    ra.seek(line);
    ra.writeUTF(dataType.toUpperCase() + ":" + newData);
}

但我相信 seek 方法以字节而不是行号移动。谁能帮忙。提前致谢:)

另外,file.lineNumber方法返回旧数据所在的确切行号,所以我已经有了需要写入的行号。

编辑:找到解决方案!谢谢大家:)如果有人感兴趣,我会在下面发布解决方案

public void overWriteFile(String dataType, String newData, Team team, int dataOrder) throws IOException
{
    try
    {
        ReadFile fileRead = new ReadFile(path);
        String data = "";
        if(path == "res/metadata.txt")
        {
            data = fileRead.getMetaData(dataType);
        }
        else if(path == "res/squads.txt")
        {
            data = fileRead.getSquadData(dataType, dataOrder);
        }
        else if(path == "res/users.txt")
        {
            data = fileRead.getUsernameData(dataType, dataOrder);
        }
        else if(path == ("res/playerdata/" + team.teamname + ".txt"))
        {
            //data = fileRead.getPlayerData(dataType, team.teamname, dataOrder);
        }
        BufferedReader file = new BufferedReader(new FileReader(path));
        String line;
        String input = "";
        while((line = file.readLine()) != null)
        {
            input += line + '\n';
        }
        input = input.replace(dataType.toUpperCase() + ":" + data, dataType.toUpperCase() + ":" + newData);
        FileOutputStream out = new FileOutputStream(path);
        out.write(input.getBytes());
    }
    catch(Exception e)
    {
        System.out.println("Error overwriting file: " + path);
        e.printStackTrace();
    }
}

共有2个答案

韶兴德
2023-03-14

这里有一个问题的链接,这个问题有一个很好的答案:我想打开一个文本文件并用java编辑一行

基本上,你不能只编辑这一行,除非它的长度完全一样。

相反,您需要复制每一行,然后当您到达要更改的行号时,不要复制旧行,只需输入新行。

我给你的链接有一个很好的例子来说明如何做到这一点。

我希望这能有所帮助……如果没有,请告诉我,我会在帖子中进一步详细说明。祝你好运:)

朱宇航
2023-03-14

一个快速而肮脏的解决方案是使用Files.readAllLinesFiles.write方法读取所有行,更改要更改的行,并覆盖整个文件:

List<String> lines = Files.readAllLines(file.toPath());
lines.set(line, dataType.toUpperCase() + ":" + newData);
Files.write(file.toPath(), lines); // You can add a charset and other options too

当然,如果它是一个非常大的文件,这不是一个好主意。有关在这种情况下如何逐行复制文件的一些想法,请参阅此答案。

不管你怎么做,但是,如果你正在改变行的字节长度,你将需要重写整个文件(AFAIK)。RandomAcessFile允许您在文件中移动并覆盖数据,但不能插入新的字节或删除现有的字节,因此文件的长度(以字节为单位)将保持不变。

 类似资料:
  • 问题内容: 我正在编写一个脚本,该脚本读取输入文件,获取值并需要在输出模板的特定位置(行)写入,我绝对是菜鸟,无法做到。它要么写在输出的第一行,要么写在最后一行。 打开的文件为“ r +” 使用的file.write(xyz)命令 关于如何向python解释以写入特定行的说法,例如。第17行(输出模板中的空白行) 编辑: 问题答案: 您可以读取文件,然后写入某些特定行。

  • 问题内容: 如何从JAR Java编译项目中写入.txt文件? 当我运行项目时,它不会给出错误,但不会将其写入JAR文件中。 我使用以下方法制作JAR文件: 码: 问题答案: 当您尝试在jar中写入文本文件时,java无法识别文本文件的绝对路径。 它会像 这不是绝对路径,因此无法写入文件。尝试从外部写入文件。

  • 我正在从文本文件中读取预订系统的座位数据,并将其写入ArrayList中。一个行将被放入一个可变的fileline中。文件行是从每个“,”中拆分出来的,并放入名为Components的数组中。然后将组件放入对象中。 txt文件示例 然后进入一个if语句,检查座位是否合适,如果合适,我想将false更改为true,并将乘客名添加为null,但只在合适的座位上。我想知道是否有任何方法可以覆盖文本文件中

  • 我仍然是python的新手,我已经尝试过这种方式覆盖txt文件上的一行 ''' 答案 =输入(“俄/秒/升/米:”) ''' 它会替换txt文件上的所有文本行,无论我想做什么,当我选择R时,它会写入txt文件的第一行,当我选择S时,它会写入txt文件的第三行 我现在已经尝试过了 ''' ''' 有人能告诉我正确的方向吗

  • 问题内容: 我正在尝试在资源文件夹中写入.txt文件,但是它什么也没写。我可以通过执行以下操作读取相同的.txt文件: 但是当涉及到写作时,我尝试做: 关于如何在该文件夹中写任何建议? 问题答案: 假设您将资源打包为jar,则无法将任何内容写入资源。Jar只。您无法更新。您可以提取和编辑内容。 您可以尝试使用偏好设置作为替代

  • 问题内容: 假设我有一个名为abhishek.txt的文件,其中包含以下行 我是,你叫什么名字。 现在我要写 阿比舍克 在“我是”之后,就像我是Abhishek,..如何直接在此特定位置书写内容。 问题答案: 您不能将数据插入文件中。您可以使用覆盖特定位置的数据。但是,插入操作需要更改其后的所有数据。对于您的情况,请尝试以下类似方法: