donchen Posted April 11, 2008 Share Posted April 11, 2008 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:RedPaul: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:RedPaul: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 More sharing options...
0 Sciuto Posted April 11, 2008 Share Posted April 11, 2008 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 :) Link to comment https://www.neowin.net/forum/topic/630880-java-replacing-a-text-in-a-text-file/#findComment-589327312 Share on other sites More sharing options...
0 Jhjm32087 Posted April 11, 2008 Share Posted April 11, 2008 You could create a String Object that stores the data and later overrides the file. Meanwhile, you are creating the new String parse the data to find the ":" and Check after if its "Yellow". If "Yellow" then in its place place Orange. Link to comment https://www.neowin.net/forum/topic/630880-java-replacing-a-text-in-a-text-file/#findComment-589327314 Share on other sites More sharing options...
0 donchen Posted April 11, 2008 Author Share Posted April 11, 2008 Hmnn.. there is no way i can just go through a text file using a loop, find the USERNAME and corresponding colour, change the colour and then just insert it back ? Link to comment https://www.neowin.net/forum/topic/630880-java-replacing-a-text-in-a-text-file/#findComment-589327320 Share on other sites More sharing options...
0 Mike Mayer Posted April 11, 2008 Share Posted April 11, 2008 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! Link to comment https://www.neowin.net/forum/topic/630880-java-replacing-a-text-in-a-text-file/#findComment-589327328 Share on other sites More sharing options...
0 jamend Posted April 11, 2008 Share Posted April 11, 2008 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(); } Link to comment https://www.neowin.net/forum/topic/630880-java-replacing-a-text-in-a-text-file/#findComment-589327333 Share on other sites More sharing options...
0 Sciuto Posted April 11, 2008 Share Posted April 11, 2008 ^ Like I said lol. Link to comment https://www.neowin.net/forum/topic/630880-java-replacing-a-text-in-a-text-file/#findComment-589327382 Share on other sites More sharing options...
0 loople Posted April 12, 2008 Share Posted April 12, 2008 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 :). Link to comment https://www.neowin.net/forum/topic/630880-java-replacing-a-text-in-a-text-file/#findComment-589330394 Share on other sites More sharing options...
0 Mike Mayer Posted April 12, 2008 Share Posted April 12, 2008 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"... Link to comment https://www.neowin.net/forum/topic/630880-java-replacing-a-text-in-a-text-file/#findComment-589330484 Share on other sites More sharing options...
0 The2 Posted April 12, 2008 Share Posted April 12, 2008 Mike Mayer said: Might work, but "best practices"... It will never return true. Only for String a="smthing"; if (a==a) .. as I recall... Link to comment https://www.neowin.net/forum/topic/630880-java-replacing-a-text-in-a-text-file/#findComment-589330505 Share on other sites More sharing options...
0 jamend Posted April 12, 2008 Share Posted April 12, 2008 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")). Link to comment https://www.neowin.net/forum/topic/630880-java-replacing-a-text-in-a-text-file/#findComment-589330545 Share on other sites More sharing options...
Question
donchen
Hi guys, I have another problem at hand now hope you guys can help me.
I have a text file as shown below.
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.
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