Win a copy of Spark in Action this week in the Open Source Projects forum!
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Bear Bibeault
  • Ron McLeod
  • Jeanne Boyarsky
  • Paul Clapham
Sheriffs:
  • Tim Cooke
  • Liutauras Vilda
  • Junilu Lacar
Saloon Keepers:
  • Tim Moores
  • Stephan van Hulst
  • Tim Holloway
  • fred rosenberger
  • salvin francis
Bartenders:
  • Piet Souris
  • Frits Walraven
  • Carey Brown

Keeping a FileWriter open

 
Ranch Hand
Posts: 63
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hello everyone,
I'm a bit stuck right now. I'm going to have a program that will be taking dynamically created Strings (in the case of this test, the input taken from a BufferedReader using readLine()), and write them to a text file. It's essentially a log. The simplest way to do this would probably be to have a static FileWriter and pass the String to a method that would write it to a text file and then close the connection. This would be easy, but it seems inefficient because you would have to write and close for every String. My first idea was to have a separate thread that would do the writing so it wouldn't have to close the connection all the time. The trouble is that I can't figure out how it is possible to pass each String to the method that is writing to the file. Or am I on the wrong track entirely? I feel like this should be basic, but I just can't seem to figure it out . All help is appreciated!

P.S. I put this in the "I/O and Streams" forum, but I wasn't sure if it should go in the "Threads and Synchronization" forum. I figured it should go here considering that the solution may or may not revolve around threading.
 
Marshal
Posts: 25668
69
Eclipse IDE Firefox Browser MySQL Database
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I think you're making that way more complicated than it actually is. Yes, it is basic (as you put it). Here's what you need to do for writing a log:

(1) Open the file at the start of the program.

(2) Write log records whenever you need to write them.

(3) Close the file at the end of the program.

I don't know where you got the idea that you need to keep closing the file. Don't close it until you've finished writing to it. And I don't know where you got the idea that you need threads to do those three simple things. You don't. It could hardly be simpler.
 
Jacob Steingart
Ranch Hand
Posts: 63
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Wow, I feel silly. I tend to overthink things, as I'm sure you noticed. I'm coming back to programming after a very long hiatus, so I'm rusty, on both the language itself (syntax, etc) and also general design and logic. I feel stupid... Anyway, I created a static BufferedWriter, instantiated it in a method that I'm using to set things up for the bulk of the program and then closed it right before the program ends. Paul, I'm sorry that I made you answer a pretty obvious question. But now I know that, when faced with a challenge, I need to step back and find the simplest and most efficient way to solve a problem. Thank you for pointing me in the right direction!
 
Paul Clapham
Marshal
Posts: 25668
69
Eclipse IDE Firefox Browser MySQL Database
  • Likes 1
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Sometimes I feel like my job here is to point out the obvious.
 
If we don't do the shopping, we won't have anything for dinner. And I've invited this tiny ad:
Thread Boost feature
https://coderanch.com/t/674455/Thread-Boost-feature
    Bookmark Topic Watch Topic
  • New Topic