Solved

How can i save hashMap data into a txt file?

Posted on 2004-05-02
15
1,731 Views
Last Modified: 2008-03-10
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
Comment
Question by:gom322
  • 8
  • 7
15 Comments
 
LVL 92

Expert Comment

by:objects
ID: 10974506
while (iter.hasNext()) {
      Object key = iter.next();
      out.print(key);
      out.println(wordMap.get(key));
    }
0
 

Author Comment

by:gom322
ID: 10974515
isnt that basically the same thing as what i have?
0
 
LVL 92

Expert Comment

by:objects
ID: 10974520
no you call next() twice each loop iteration when you should only be calling it once.
0
Active Directory Webinar

We all know we need to protect and secure our privileges, but where to start? Join Experts Exchange and ManageEngine on Tuesday, April 11, 2017 10:00 AM PDT to learn how to track and secure privileged users in Active Directory.

 

Author Comment

by:gom322
ID: 10974521
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
 

Author Comment

by:gom322
ID: 10974541
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
 
LVL 92

Expert Comment

by:objects
ID: 10974553
are you sure that the data in your map is not missing the 1st character
0
 

Author Comment

by:gom322
ID: 10974564
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
 
LVL 92

Expert Comment

by:objects
ID: 10974585
>  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
 
LVL 92

Accepted Solution

by:
objects earned 50 total points
ID: 10974594
String line = null;
while (null!=(line=in.readLine()))
{
   StringTokenizer st = new StringTokenizer(line);
   while (st.hasMoreTokens())
   {
      String word = st.nextToken();
      ...
0
 

Author Comment

by:gom322
ID: 10974598
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
 

Author Comment

by:gom322
ID: 10974610
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
 
LVL 92

Expert Comment

by:objects
ID: 10974618
you only process a word when you find a space, so the last word doesn't get processed.
0
 

Author Comment

by:gom322
ID: 10974634
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
 
LVL 92

Expert Comment

by:objects
ID: 10974665
Use JFileChooser
0
 

Author Comment

by:gom322
ID: 10974666
oh you can use filechooser for this too. okay. thanks
0

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Spring Framework HTTPSession management 1 45
Configure a Bean in an XML file 4 42
String array comparison 4 38
jboss 7.1 start up error 1 42
Are you developing a Java application and want to create Excel Spreadsheets? You have come to the right place, this article will describe how you can create Excel Spreadsheets from a Java Application. For the purposes of this article, I will be u…
Introduction This article is the last of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article covers our test design approach and then goes through a simple test case example, how …
Viewers will learn about the different types of variables in Java and how to declare them. Decide the type of variable desired: Put the keyword corresponding to the type of variable in front of the variable name: Use the equal sign to assign a v…
This tutorial covers a step-by-step guide to install VisualVM launcher in eclipse.

820 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question