Not all items in array are outputting to file.

Hi i recently asked the question on how i could read files in from a directory which i specify. What has been done is...

The file names have been read from a directory and stored in an array of type string. I then iterate through the array using a for loop to print each file name in the array to an external "txt" file. But when i open the txt file only about 180 file names have been written to it when in fact the array holds around 390 file names. ( which i checked using the static variable length in array)

Why doesnt all the file names output to the external file?

Note: For outputting to an external file i am using a java.io.FilerWriter. Could it be this?

Initially i thought it could be because i am using an array, so instead i used another collection called the treeset, but this has the same effect to the program.

Anyone know why, and how i may resolve this?
LVL 18
Ravi SinghSenior Software EngineerAsked:
Who is Participating?
 
CEHJConnect With a Mentor Commented:
Best to use a PrintWriter

File f = new File("javadir");
PrintWriter out = new PrintWriter(new FileWriter("file.txt"));
String[] fileNames = f.list();
for (int i = 0; i < fileNames.length; i++) {
      out.println(fileNames[i]);
}
out.close()
0
 
Ravi SinghSenior Software EngineerAuthor Commented:
i instantiated  it like this:

PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(newFileName)));

could it be the bufferedwriter then?
0
 
zzynxConnect With a Mentor Software engineerCommented:
>> could it be the bufferedwriter then?
Could be.
A buffered writer has a flush() call. Use it before closing
0
The 14th Annual Expert Award Winners

The results are in! Meet the top members of our 2017 Expert Awards. Congratulations to all who qualified!

 
zzynxSoftware engineerCommented:
btw: It was a good idea to use a buffered writer.
I quote from the java help of BufferedWriter:

In general, a Writer sends its output immediately to the underlying character or byte stream. Unless prompt output is required, ****it is advisable to wrap a BufferedWriter around any Writer whose write() operations may be costly, such as FileWriters and OutputStreamWriters****. For example,

 PrintWriter out
   = new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));
 
will buffer the PrintWriter's output to the file. Without buffering, each invocation of a print() method would cause characters to be converted into bytes that would then be written immediately to the file, which can be very inefficient.
0
 
Ravi SinghSenior Software EngineerAuthor Commented:
Ah sorry ive done this so many times and still havnt learned, I didnt close the printwriter i just noticed it now from your code CEHJ. Sorry to bother you.
0
 
zzynxSoftware engineerCommented:
So in CEHJ's example it would be:

File f = new File("javadir");
BufferedWriter bw = new BufferedWriter(new FileWriter("file.txt"));
PrintWriter out = new PrintWriter(bw);
String[] fileNames = f.list();
for (int i = 0; i < fileNames.length; i++) {
      out.println(fileNames[i]);
}
bw.flush();
out.close()
0
 
Ravi SinghSenior Software EngineerAuthor Commented:
Thanks zzynx.
0
 
zzynxSoftware engineerCommented:
You're welcome.
Thanks for accepting. That keeps us going.
:-)
0
 
CEHJCommented:
8-)

Not much point in flushing btw at that point. The buffered will automatically be flushed on close
0
 
zzynxSoftware engineerCommented:
>> The buffered will automatically be flushed on close
Good to know. Thanks.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.