Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java Replace Line In Text File

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.

like image 971
Eveno Avatar asked Nov 18 '13 04:11

Eveno


People also ask

How do you replace a specific string in a text file?

A very simple solution would be to use: s = s. replace( "textFiles/a.

How do you override a text file in Java?

To overwrite a file in Java, set the second argument of FileWriter to false .


2 Answers

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.");     } } 
like image 179
Michael Yaworski Avatar answered Sep 23 '22 07:09

Michael Yaworski


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.

like image 33
Tuupertunut Avatar answered Sep 21 '22 07:09

Tuupertunut