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.
A very simple solution would be to use: s = s. replace( "textFiles/a.
To overwrite a file in Java, set the second argument of FileWriter to false .
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."); } }
Since Java 7 this is very easy and intuitive to do.
List<String> fileContent = new ArrayList<>(Files.readAllLines(FILE_PATH, StandardCharsets.UTF_8)); for (int i = 0; i < fileContent.size(); i++) { if (fileContent.get(i).equals("old line")) { fileContent.set(i, "new line"); break; } } Files.write(FILE_PATH, fileContent, StandardCharsets.UTF_8);
Basically you read the whole file to a List
, edit the list and finally write the list back to file.
FILE_PATH
represents the Path
of the file.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With