Java Replace Line In Text File

java, jcheckbox, line, replace

Solution

At the bottom, I have a general solution to replace lines in a file. But first, here is the answer to the specific question at hand. Helper function:

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.");
    }
}

Then call it:

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

Original Text File Content:

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

and you used the method `replaceSelected("Do the dishes", "1");`, it would just not change the file.

Since this question is pretty specific, I'll add a more general solution here for future readers (based on the title).

// 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.");
    }
}

Problem

How do I replace a line of text found within a text file? I have a string such as: ``` Do the dishes0 ``` And I want to update it with: ``` Do the dishes1 ``` (and vise versa) How do I accomplish this? ``` 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) { } ``` By the way, I want to replace ONLY the line that was read. NOT the entire file.

Original source

Related problems