How can i save hashMap data into a txt file?

Currently, this is what i have:

    PrintWriter out = new PrintWriter(new FileOutputStream("newFile.txt"));
    Set keyList = wordMap.keySet();
   
    Iterator iter = keyList.iterator();
   
    while (iter.hasNext()) {
      out.print(iter.next());
      out.println(wordMap.get(iter.next()));
    }
    out.close();

it seems to kind of work, but not alway???
wordMap is a hashmap that contain list of words and their frequency.
gom322Asked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

objectsCommented:
while (iter.hasNext()) {
      Object key = iter.next();
      out.print(key);
      out.println(wordMap.get(key));
    }
0
gom322Author Commented:
isnt that basically the same thing as what i have?
0
objectsCommented:
no you call next() twice each loop iteration when you should only be calling it once.
0
Cloud Class® Course: CompTIA Cloud+

The CompTIA Cloud+ Basic training course will teach you about cloud concepts and models, data storage, networking, and network infrastructure.

gom322Author Commented:
one weird thing. i used a JFileChooser to get the file, and used a BufferedReader to read through the text file. what i've noticed was when i do bReader.readLine(), it seems to ignore the first character in that line. i dont get why its doing that.
0
gom322Author Commented:
one more weird thing. I actually did

while (iter.hasNext()) {
      Object key = iter.next();
      out.print(key);
      out.println(wordMap.get(key));
    }

before i posted question on this site, but the thing is it seems to miss the last key when priting. for example, i have a sentence:

i like big monkey and you like small monkey
haha. this is funny.

when i run the code, this is the output:

you1
aha.1
and1
like2
monkey1
big1
is1
this1
small1
1

you can notice that it misses the first character from each line, and the last word from each line. weird...
0
objectsCommented:
are you sure that the data in your map is not missing the 1st character
0
gom322Author Commented:
here's the code for my class. its really short.

SelectFile is just another class ihave for choosing txt files.

public class AnalyzeText {
 
  private File inFile;
  private FileReader fReader;
  private BufferedReader bReader;
  private HashMap wordMap;
  private static int END_OF_READER= -1;
 
  public AnalyzeText() {
    SelectFile chooser = new SelectFile();
    inFile = chooser.getFile();
    wordMap = new HashMap();
  }
 
  public void getWordFrequency() throws IOException {
    fReader = new FileReader(inFile);
    bReader = new BufferedReader(fReader);
   
    if (bReader.ready()) {
      while (bReader.read()!=END_OF_READER) {
        String tempStr = new String();
        String line = bReader.readLine();
        char[] charArray = line.toCharArray();
       
        for (int i=0; i< charArray.length; i++ ) {
          char tempChar = charArray[i];
         
          if (!Character.isSpaceChar(tempChar)) {
            tempStr+=tempChar;
          } else {
            int count=1;
            Integer frequency;
     
            if (wordMap.containsKey(tempStr)) {
              frequency=(Integer)wordMap.get(tempStr);
              count=frequency.intValue();
              count++;
            }
           
            frequency=new Integer(count);
            wordMap.put(tempStr, frequency);
            tempStr = new String();
          }        
        }
      }
    }
  }
 
  public void saveData() throws IOException{
    PrintWriter out = new PrintWriter(new FileOutputStream("newFile.txt"));
    Set keyList = wordMap.keySet();
   
    Iterator iter = keyList.iterator();
   
   while (iter.hasNext()) {
      Object key = iter.next();
      out.print(key);
      out.println(wordMap.get(key));
    }

    out.close();
  }
 
}
0
objectsCommented:
>  while (bReader.read()!=END_OF_READER) {

that line reads the first char from line and is lost.


it would be a lot easier to use a StringTokenizer to parse the words.
0
objectsCommented:
String line = null;
while (null!=(line=in.readLine()))
{
   StringTokenizer st = new StringTokenizer(line);
   while (st.hasMoreTokens())
   {
      String word = st.nextToken();
      ...
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
gom322Author Commented:
WOuld i have to delete that line of code? if so , how would that line of code be reimplemented so that it does keep reading text even if it reached the end.
i dont see how i could make it so it doesnt read the first char.

it would be easier to use StringTokenizer, but i cant use it for this time.
0
gom322Author Commented:
okay. it got the first character but still misses the last word.. also, is there a way for the user to specify where and the file name he wants to save this as??
0
objectsCommented:
you only process a word when you find a space, so the last word doesn't get processed.
0
gom322Author Commented:
haha. okay i got it. thanks alot. one more thing, is there a way for a user to specify a directory and file name it wants to save under?
0
objectsCommented:
Use JFileChooser
0
gom322Author Commented:
oh you can use filechooser for this too. okay. thanks
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Java

From novice to tech pro — start learning today.