当前位置: 首页 > 面试题库 >

Java替换文本文件中的行

鲁丰
2023-03-14
问题内容

如何替换在文本文件中找到的一行文本?

我有一个字符串,例如:

Do the dishes0

我想用更新它:

Do the dishes1

(反之亦然)

我该如何完成?

ActionListener al = new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    JCheckBox checkbox = (JCheckBox) e.getSource();
                    if (checkbox.isSelected()) {
                        System.out.println("Selected");
                        String s = checkbox.getText();
                        replaceSelected(s, "1");
                    } else {
                        System.out.println("Deselected");
                        String s = checkbox.getText();
                        replaceSelected(s, "0");
                    }
                }
            };

public static void replaceSelected(String replaceWith, String type) {

}

顺便说一句,我只想替换已读取的行。不是整个文件。


问题答案:

在底部,我有一个通用的解决方案来替换文件中的行。但是首先,这是眼前特定问题的答案。辅助功能:

public static void replaceSelected(String replaceWith, String type) {
    try {
        // input the file content to the StringBuffer "input"
        BufferedReader file = new BufferedReader(new FileReader("notes.txt"));
        StringBuffer inputBuffer = new StringBuffer();
        String line;

        while ((line = file.readLine()) != null) {
            inputBuffer.append(line);
            inputBuffer.append('\n');
        }
        file.close();
        String inputStr = inputBuffer.toString();

        System.out.println(inputStr); // display the original file for debugging

        // logic to replace lines in the string (could use regex here to be generic)
        if (type.equals("0")) {
            inputStr = inputStr.replace(replaceWith + "1", replaceWith + "0"); 
        } else if (type.equals("1")) {
            inputStr = inputStr.replace(replaceWith + "0", replaceWith + "1");
        }

        // display the new file for debugging
        System.out.println("----------------------------------\n" + inputStr);

        // write the new string with the replaced line OVER the same file
        FileOutputStream fileOut = new FileOutputStream("notes.txt");
        fileOut.write(inputStr.getBytes());
        fileOut.close();

    } catch (Exception e) {
        System.out.println("Problem reading file.");
    }
}

然后调用它:

public static void main(String[] args) {
    replaceSelected("Do the dishes", "1");   
}

原始文本文件内容:

Do the dishes0 Feed the dog0 Cleaned my room1

Output:

Do the dishes0 Feed the dog0 Cleaned my room1

Do the dishes1 Feed the dog0 Cleaned my room1

New text file content:

Do the dishes1 Feed the dog0 Cleaned my room1

And as a note, if the text file was:

Do the dishes1 Feed the dog0

Cleaned my room1并且你使用了方法replaceSelected(“Do the dishes”, “1”);,它将不会更改文件。

由于这个问题非常具体,因此我将在此处为将来的读者添加一个更通用的解决方案(基于标题)。

// read file one line at a time
// replace line as you read the file and store updated lines in StringBuffer
// overwrite the file with the new lines
public static void replaceLines() {
    try {
        // input the (modified) file content to the StringBuffer "input"
        BufferedReader file = new BufferedReader(new FileReader("notes.txt"));
        StringBuffer inputBuffer = new StringBuffer();
        String line;

        while ((line = file.readLine()) != null) {
            line = ... // replace the line here
            inputBuffer.append(line);
            inputBuffer.append('\n');
        }
        file.close();

        // write the new string with the replaced line OVER the same file
        FileOutputStream fileOut = new FileOutputStream("notes.txt");
        fileOut.write(inputBuffer.toString().getBytes());
        fileOut.close();

    } catch (Exception e) {
        System.out.println("Problem reading file.");
    }
}


 类似资料:
  • 问题内容: 我有一个文本文件,我只想更改文件的第一行。该文件可能长达数百万行,因此我宁愿不必遍历所有内容,因此我想知道是否还有另一种方法可以做到这一点。 我还想对第一行应用一些规则,以便将某些单词的实例替换为其他单词。 这可能吗? 问题答案: 除非结果行的长度与原始行的长度不同,否则A 将达到目的。 如果事实证明您被迫执行复制(替换第一行,其余数据应原样复制),我建议使用和。首先使用的读取第一行。

  • 问题内容: 我有一个名为FormatString.java的文本文件。它包含一些单词。在所有这些单词中,我想将单词oldstring替换为newstring,并将最终结果重命名为t.txt。我已经编写了代码。从技术上讲,它应该起作用。问题是我不知道在哪里保存FormatString.java文件。我是否将其保存在保存了ReplacingText程序的同一类文件夹中,还是将其保存在其他地方。我转到命

  • 本文向大家介绍Python替换文件中的文本,包括了Python替换文件中的文本的使用技巧和注意事项,需要的朋友参考一下 例子            

  • 问题内容: 我有一个名为log.txt的文本文件,它具有以下数据 第一个逗号之前的数字是指定每个项目的索引。 我想做的是读取文件,然后将给定行中字符串的一部分(例如textFiles / a.txt)替换为另一值(例如something / bob.txt)。 这就是我到目前为止 问题答案: 一种方法是使用: 您还可以使用正则表达式,或查找搜索字符串在一行中的何处。

  • 问题内容: 我正在尝试编辑matlabfile并替换某些特定行中的一些编码部分init。但是,使用下面的格式进行更改将完全不会更改行上下文。(它将打印相同的旧行)。知道我在做什么错吗?’replaceAll’不适合用其他词替换某些词吗? 提前致谢。 问题答案: 该方法在将正则表达式作为参数,并在正则表达式的一些字符有特殊的含义,比如在你的表达括号。 只需改用采用文字字符串的方法即可: 不要被方法的

  • 问题内容: 我试图通过读取每一行,对其进行测试,然后编写是否需要更新来替换文本文件中的文本。我不想另存为新文件,因为我的脚本已经先备份了文件并可以进行备份。 到目前为止,这是我所拥有的…我从os.walk()获得了fpath,并保证pathmatch var正确返回: 但是最终发生的是,我只得到了几行(正确更新,请注意,但是从文件的开头重复了)。我认为这是一个范围界定的问题。 *另外:我想知道如何