Program design when using BufferedWriter, do I repeatedly open and close file?

John :

I have a program that does a lot of processing with loops and writes strings to a file at many different points. I'm not sure about the overall design for how best to do this. I won't need to read from the file at any point during running, though will want to view it afterwards.

Firstly, is a BufferedWriter with FileWriter a reasonable way of doing this?

Secondly, presumably I don't want to be opening and closing this every time I want to write something (several times per second).

But if I use try with resources then I'd have to put practically the entire program inside that try, is this normal?

At the moment the skeleton looks like:

try (FileWriter writer = new FileWriter("filename.txt");
     BufferedWriter bw = new BufferedWriter(writer)) {

} catch (IOException e) {
    //catch IO error
}

for (//main loop){
    bw.write(string);
    for (//several sub loops){
        bw.write(//more strings);
    }
    for (//several sub loops){
        bw.write(//more strings);
    }
}

bw.write(//final string);

try {
    bw.close();
} catch (IOException ex) {
    //catch IO error
}

Does this look reasonable or is there a better way? Thanks very much in advance for the help.

Edit - thanks to you all for the help, totally answered my questions.

Manuel :

It is totally OK to put the whole Code into a try-catch routine. Whenever you have issues to write into the file it will just catch it and does not give you an error. However, I would recommend you to try this structure with just one try-catch routine.

try  { (FileWriter writer = new FileWriter("filename.txt");
 BufferedWriter bw = new BufferedWriter(writer)) 

for (/*main loop*/){
   bw.write(string);
   for (/*several sub loops*/){
    bw.write(/*more strings*/);
    }
for (/*several sub loops*/){
    bw.write(/*more strings*/);
    }
   }

bw.write(/*final string*/);


bw.close(); 


} catch (IOException e) {
   System.out.println("error");
}

PS: If you comment something between some code use this:/* comment */ instead of this:// because it will comment out the whole line.

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=307076&siteId=1