Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1744
  • Last Modified:

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.
0
gom322
Asked:
gom322
  • 8
  • 7
1 Solution
 
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
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
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
 
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

Featured Post

New feature and membership benefit!

New feature! Upgrade and increase expert visibility of your issues with Priority Questions.

  • 8
  • 7
Tackle projects and never again get stuck behind a technical roadblock.
Join Now