how can i add data in to json file in java? - java

i want to add data inside of an existing json file..
this is my code:
JsonWriterWithGui(){
if(ae.getSource() == btn_submit){
String lname = (String)lbl_name.getText().toString();
String ladd = (String)lbl_add.getText().toString();
String lcontact = (String)lbl_contact.getText().toString();
FileWriter jsonFileWriter = new FileWriter( "E:\\"+tsave+".json");
jsonFileWriter.write(jsonObject.toJSONString());
jsonFileWriter.flush();
jsonFileWriter.close();
this code is already working. but I am trying to update a json file that already exists.

This is a bit of a guess because the problem you're having isn't entirely clear from the question, but if you're finding that your writes are overwriting instead of appending then try changing this line:
FileWriter jsonFileWriter = new FileWriter( "E:\\"+tsave+".json");
...to this:
FileWriter jsonFileWriter = new FileWriter("E:\\"+tsave+".json", true);
You see, FileWriter is backed by FileOutputStream, which takes a boolean argument saying whether new content should be appended or not. This boolean is false by default so if you want to append then you need to explicitly say so.

Related

Java create a new file, or, override the existing file

What I want to achieve is to create a file regardless of whether the file exists or not.
I tried using File.createNewFile() but that will only create the file if it does not already exists. Should I use File.delete() and then File.createNewFile()?
Or is there a clearer way of doing it?
FileWriter has a constructor that takes 2 parameters too: The file name and a boolean. The boolean indicates whether to append or overwrite an existing file. Here are two Java FileWriter examples showing that:
Writer fileWriter = new FileWriter("c:\\data\\output.txt", true); //appends to file
Writer fileWriter = new FileWriter("c:\\data\\output.txt", false); //overwrites file
You can use a suitable Writer:
BufferedWriter br = new BufferedWriter(new FileWriter(new File("abc.txt")));
br.write("some text");
It will create a file abc.txt if it doesn't exist. If it does, it will overwrite the file.
You can also open the file in append mode by using another constructor of FileWriter:
BufferedWriter br = new BufferedWriter(new FileWriter(new File("abc.txt"), true));
br.write("some text");
The documentation for above constructor says:
Constructs a FileWriter object given a File object. If the second
argument is true, then bytes will be written to the end of the file
rather than the beginning.
Calling File#createNewFile is safe, assuming the path is valid and you have write permissions on it. If a file already exists with that name, it will just return false:
File f = new File("myfile.txt");
if (f.createNewFile()) {
// If there wasn't a file there beforehand, there is one now.
} else {
// If there was, no harm, no foul
}
// And now you can use it.

How do I print to a new line in java?

boolean valid = false;
String user = txtUser.getText();
String pass = txtPass.getText();
try {
PrintWriter writer = new PrintWriter("src/file");
writer.println("The line");
writer.println(user + "#" + pass);
JOptionPane.showMessageDialog(null,"Sign Up"complete",JOptionPane.INFORMATION_MESSAGE);
writer.close();
} catch(Exception e) {
}
I am making a sign up page and I already have made the login page. The # in the code is used to separate the username to the password. Everything works fine but the problem with this is that every time I sign up it replaces the sign up information I gave the previous time. So if I signed up the first time with the username "greg" and the password "877" it works fine but then if I go on program again and sign up another user with a different username and password, it replaces the first username and pass. I need it to go to new line after every time someone signs up.
Wrap your file with a FileWriter first:
PrintWriter writer = new PrintWriter(new FileWriter("src/file", true));
Here's the description for the constructor of FileWriter(String, boolean):
Constructs a FileWriter object given a file name with a boolean indicating whether or not to append the data written.
Parameters
fileName - String The system-dependent filename.
append - boolean if true, then data will be written to the end of the file rather than the beginning
you are using public PrintWriter(File file) to write to the file
The javadoc says -
parameter specifies the file to use as the destination of this writer. If the file
exists then it will be truncated to zero size; otherwise, a new file will be created.
The output will be written to the file and is buffered.
So in your case you need to append text to the contents of the existing file so as Luiggi said FileWriter is your friend
FileWriter, a character stream to write characters to file. By default, it will
replace all the existing content with new content, however, when you specified a
true (boolean) value as the second argument in FileWriter constructor, it will keep
the existing content and append the new content in the end of the file.
try in this way
PrintWriter outputFile = new PrintWriter(new FileWriter("src/file", true));

Delete the content of csv file in Java

Every day I update a csv file using a FileWriter. When we step into a new month I have to delete the data from the previous month. My below code only updates a data in a csv file so, please help in deleting the previous month's data.
At least I need to know how to delete the data in csv file using FileWriter, so that I can manage to code for deleting previous month data.
private static void eventsUpdate(HttpServletRequest request,
HttpServletResponse response) {
String date=request.getParameter("date"); //getting from jsp page
String event=request.getParameter("event"); //getting from jsp page
File file = new File( "D:///events/events.csv");
if ( !file.exists() )
file.createNewFile();
FileWriter fw = new FileWriter(file,true);
BufferedWriter writer = new BufferedWriter( fw );
writer.write(date);
writer.write(",");
writer.write(event);
System.out.println("writing into excel");
writer.newLine();
writer.close();
fw.close();
}
Actually when you use the true argument in your FileWriter instantiation, you create a file writer object in append mode.
FileWriter fw = new FileWriter(file,false);
If you don't use the true option, the file will be overwritten by the new content. Therefore, I would suggest to follow this roadmap:
Read the file content as a whole, in a String
Remove the content you want to remove from the specific String
Overwrite the file
content using your new content in the specific String
Hope I helped!
I suggest you that you may create unique name file like march2014, january2013 instead of deleting it. Every month you need to read your target file which is named by your month strategy.
For ex:
When you reach april2014, create a new file april2014 etc. and read it for that month.

How to replace the contents of a file after processing

Let's say that I have a TreeMap and I want to take all values for a key, make a file with these, pass the file to another process loop and do this for every map key, so I always have to use the same file but its content must be replaced every time for each key.
What I do is:
PrintWriter writeRatings = new PrintWriter("ratings.txt", "UTF-8");
TreeMap<Integer, ArrayList<Rating>> ratings = new TreeMap<Integer, ArrayList<Rating>>();
-->
for(Integer clID:ratings.keySet()){
ArrayList<Rating> ratingGroup = ratings.get(clID);
for(Rating r:ratingGroup){
witer.println(r.toString());
}
}
writer.flush();
writer.close();
With this, I get a file with all the data for each map key. Can you suggest how can I get only the data from the current key each time in the file?
If you want to use the same file and just append lines to it, use a FileWriter and set the append mode to true
PrintWriter writer = new PrintWriter(new FileWriter("filename", true));
This will append lines to the file, instead of over writing the file. This way, different processes can use the same file and keep on adding new data to the file
So what worked for me was to include this line into the for loop in the position of the arrow in the main question post:
PrintWriter writer = new PrintWriter(new FileWriter("filename"));

FileWriter, How to write on the same document [duplicate]

This question already has answers here:
Java FileWriter with append mode
(4 answers)
Closed 9 years ago.
I have created a Java Game and when the game finishes, a method is executed that tells the user to enter his his/her name then their score will save in playscores.txt document. This is working fine. However, i want the more than just one person's score in this document. I want it so everyone that plays the game name and score will be saved in this document. Would really appreciate some help.
This is my gameComplete Method code:
public void gameComplete() throws IOException {
String name = (String) JOptionPane.showInputDialog(
frame,
"Enter your name: ",
"Save Score",
JOptionPane.PLAIN_MESSAGE);
Score score = new Score(player.getScore(), name);
FileWriter fstream = new FileWriter("playerscores.txt");
BufferedWriter out = new BufferedWriter(fstream);
out.write("Name : " + score.getName() + System.getProperty( "line.separator" ) );
out.write("Score : " + score.getScore());
out.close();
}
I have tried different stuff, such as Objectoutputstream but unfortunately cannot figure out how to do it and was wondering if it is even possible. Furthermore, i would like to know what Class i should be using to get this done.
If you're happy to just append the new score to the end of the file, replace:
FileWriter fstream = new FileWriter("playerscores.txt");
with:
FileWriter fstream = new FileWriter("playerscores.txt", true);
If you can have more than one user playing at the same time, you'll need to use file locking too, to avoid race conditions when accessing the file.
In order to do it for more than one person, you should open the file in append mode.
FileWriter fstream = new FileWriter("playerscores.txt",true);
Syntax: public FileWriter(File file, boolean append)
Parameters:
file - a File object to write to
append - if true, then bytes will be written to the end of the file
rather than the beginning.
By default, the append parameter is false. So , earlier, you were over-writing the score of the previous player with the current one.
Firstly, if you want the file to be added to rather than wiped and written to each time then make sure you add the second argument of true to have it append the text.
You could use a CSV file to store the answers in columns and then read them out parsing the data by using commas.
FileWriter fileW = new FileWriter("playerscores.txt", true);
Hope that helps.

Categories

Resources