Skip to content

OutputStreamWriter doesn’t rewrite file

I want to rewrite my JSON file with my edited jsonObj. When I set the 2nd parameter by the FileOutputStream to true, I get a output which is appended to the file. But I want to rewrite this, how can I do it?

When I set the 2nd parameter to false, myReader is null and I don’t get a output.

 File myFile = new File(Environment.getExternalStorageDirectory().getPath() + filepath);
 FileOutputStream out = new FileOutputStream(myFile, false);
 OutputStreamWriter myOutWriter = new OutputStreamWriter(out);

 String output = "";
 FileInputStream fIn = new FileInputStream(myFile);
 BufferedReader myReader = new BufferedReader(new InputStreamReader(fIn, StandardCharsets.UTF_8.name()));

 String line;
 while ((line = myReader.readLine()) != null) {
   output += line;
 }
 
JSONObject jsonObj = new JSONObject(output);
jsonObj.put("test", "hi");


myOutWriter.write(jsonObj.toString());
myOutWriter.close();
out.close();

Answer

You are trying to write and read to the same file at the same time in “overwrite mode”.

Once you execute FileOutputStream out = new FileOutputStream(myFile, false); the file is immediately emptied (truncated to 0).

So trying to read from it will not work, as there will be nothing to read.

Change the order of your code – read the file to memory fist, close the reader, then open for writing.