• 0

[JAVA] Replacing a text in a text file.


Question

Hi guys, I have another problem at hand now hope you guys can help me.

I have a text file as shown below.

  Quote
Mark:123:Red

Paul:746:Yellow

Ginger:447:Blue

I have a method to read in the text file and print out the line accoding to the user name.

eg. if user name is Paul, i will print out "PAUL:746:YELLOW".

Now I will like to edit YELLOW to ORANGE and then put it back to the text file in the same line.

it SHOULD look like this.

  Quote
Mark:123:Red

Paul:746:Orange

Ginger:447:Blue

The only solution i can think of is using a temp file to copy it over. Is there any other faster implementation or better ones ?

Link to comment
https://www.neowin.net/forum/topic/630880-java-replacing-a-text-in-a-text-file/
Share on other sites

10 answers to this question

Recommended Posts

  • 0

I'm new at Java, so shoot me if it's wrong but it's just an idea I would use.. 'ReadFile' to read the txt file, BufferedReader to go over the lines, add the lines to some sort of a Collection or just String[]. Then go over that Collection/ String[] again with a for each or something then use the replace/replaceAll() methods of String and eventually write every line back with FileOutputStream. (The last two, string replace / write output can be combined since you'll need to go over every line again anyway to write it out.

Hope it helps a bit :)

  • 0

Read into memory, make changes, write back to disk.

You'll find that there are no advantages to doing it in-place on the disk. In fact, reading bytes (as in single characters) from a disk is a great deal slower than reading a lot more... reading clusters at a time which varies from format to format but is certainly a lot more than thousands of characters at a time.

In the context of an academic exercise like this... they probably want you to use the java File classes and/maybe StringTokenizer... :)

Enjoy!

  • 0

Try something like this (I just wrote it in the reply box, it's untested):

try {
	BufferedReader in = new BufferedReader(new FileReader("in.txt"));
	PrintWriter out = new PrintWriter(new File("out.txt"));

	String line; //a line in the file
	String params[]; //holds the name:number:color parameters of each line

	while ((line = in.readLine()) != null) {
		params = line.split(":", 3); //split the line into the 3 parameters seperated by :
		if (params[0] == "Paul" && params[1] == "746") { //find the line we want to replace
			out.println(params[0] + ":" + params[1] + ":" + "Orange"); //output the new line
		} else {
			out.println(line); //if it's not the line, just output it as-is
		}
	}

	in.close();
	out.flush();
	out.close();
} catch (Exception e) {
	e.printStackTrace();
}

  • 0
  Poolius said:
Can you use logical equals (==) on string types in Java now? I thought you had to use .equals() as == checked memory references? I realise I'm being a bit trivial, the code kindly provided appears pretty sound :) .

No, you still should be using .equals()

Might work, but "best practices"...

  • 0

Oh sorry, lol :fun:

try {
	BufferedReader in = new BufferedReader(new FileReader("in.txt"));
	PrintWriter out = new PrintWriter(new File("out.txt"));

	String line; //a line in the file
	String params[]; //holds the name:number:color parameters of each line

	while ((line = in.readLine()) != null) {
		params = line.split(":", 3); //split the line into the 3 parameters seperated by :
		if ("Paul".equals(params[0]) && "746".equals(params[1])) { //find the line we want to replace
			out.println(params[0] + ":" + params[1] + ":" + "Orange"); //output the new line
		} else {
			out.println(line); //if it's not the line, just output it as-is
		}
	}

	in.close();
	out.flush();
	out.close();
} catch (Exception e) {
	e.printStackTrace();
}

PS, when you use "literal".equals(stringObj), you won't get a runtime error if stringObj is null (unlike stringObj.equals("literal")).

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.