nbhuiya
nbhuiya

Reputation: 39

Reading input files in Java

The purpose of this program is to read an input file and parse it looking for words. I used a class and instantiated objects to hold each unique word along with a count of that word as found in the input file. For instance, for a sentence “Word” is found once, “are” is found once, “fun” is found twice, ... This program ignores numeric data (e.g. 0, 1, ...) as well as punctuation (things like . , ; : - )

The assignment does not allow using a fixed size array to hold word strings or counts. The program should work regardless of the size of the input file.

I am getting the following compiling error: '<>' operator is not allowed for source level below 1.7 [line: 9]

import java.io.*;
import java.util.*;

public class Test {

public static void main(String args[]) throws IOException {


    HashMap<String,Word> map = new HashMap<>();

    // The name of the file to open.
    String fileName = "song.txt";

    // This will reference one line at a time
    String line = null;

    try {
        // FileReader reads text files in the default encoding.
        FileReader fileReader =
                new FileReader(fileName);

        // Always wrap FileReader in BufferedReader.
        BufferedReader bufferedReader =
                new BufferedReader(fileReader);

        while((line = bufferedReader.readLine()) != null) {

            String[] words = line.split(" ");

            for(String word : words){
                if(map.containsKey(word)){
                    Word w = map.get(word);
                    w.setCount(w.getCount()+1);
                }else {
                    Word w = new Word(word, 1);
                    map.put(word,w);
                }
            }
        }

        // Always close files.
        bufferedReader.close();
    }
    catch(FileNotFoundException ex) {
        System.out.println(
                "Unable to open file '" +
                        fileName + "'");
    }
    catch(IOException ex) {
        System.out.println(
                "Error reading file '"
                        + fileName + "'");
        // Or we could just do this:
        // ex.printStackTrace();
    }



    for(Map.Entry<String,Word> entry : map.entrySet()){
        System.out.println(entry.getValue().getWord());
        System.out.println("count:"+entry.getValue().getCount());
    }
 }

   static class Word{

    public Word(String word, int count) {
        this.word = word;
        this.count = count;
    }

    String word;
    int count;

    public String getWord() {
        return word;
    }

    public void setWord(String word) {
        this.word = word;
    }

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }
}

}

Upvotes: 2

Views: 88

Answers (2)

Jim Rush
Jim Rush

Reputation: 4163

You either need to compile with a JDK of version 1.7 or later, or change the line:

HashMap<String,Word> map = new HashMap<>();

to

HashMap<String,Word> map = new HashMap<String,Word>();

Upvotes: 2

Youssef Lahoud
Youssef Lahoud

Reputation: 529

replace

HashMap<String,Word> map = new HashMap<>();

with:

HashMap<String,Word> map = new HashMap<String,Word>();

Upvotes: 2

Related Questions