2016-03-08 3 views
-1

J'ai un programme dans lequel un fichier texte est lu, puis chaque mot du fichier est sorti, suivi du nombre de fois qu'il est répété dans le fichier.Java Program TextFile Issue

Répondre

1

Utilisez le code suivant.

import java.io.*; 

class FileRead { 

public static void main(String args[]) { 
    try { 
     // Open the file that is the first 
     // command line parameter 
     FileInputStream fstream = new FileInputStream("C:\\Users\\Desktop\\formate.txt"); 
     // Get the object of DataInputStream 
     DataInputStream in = new DataInputStream(fstream); 
     BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
     String strLine; 
     //Read File Line By Line 
     while ((strLine = br.readLine()) != null) { 
      // Print the content on the console 
      System.out.println(strLine); 
     } 
     //Close the input stream 
     in.close(); 
    } catch (Exception e) {//Catch exception if any 
     System.err.println("Error: " + e.getMessage()); 
    } 
    } 
} 
+0

Je ne peux pas utiliser un BufferedReader dans le fichier. C'est quelque chose dans ma boucle, je crois. C'est lire ligne par ligne plutôt que de lire tout le dossier. – Mike

0

Essayez ce code:

public static void main(String[] args) throws Throwable 
{ 
    File inputFile = new File("input.txt"); 
    File outputFile = new File("output.txt"); 
    Scanner scanner = new Scanner(inputFile); 
    HashMap<String, Integer> count = new HashMap<String, Integer>(); 

    while (scanner.hasNext()) 
    { 
     String word = scanner.next(); 
     if (count.containsKey(word)) 
     { 
      count.put(word, count.get(word) + 1); 
     } 
     else 
     { 
      count.put(word, 1); 
     } 
    } 
    scanner.close(); 

    BufferedWriter writer = new BufferedWriter(new FileWriter(outputFile)); 
    for (Entry<String, Integer> entry : count.entrySet()) 
    { 
     writer.write("#" + entry.getKey() + " " + entry.getValue()+"\r\n"); 
    } 
    writer.close(); 
} 
+0

Impossible d'utiliser un lecteur tamponné ou HashMap :(Je sais que ce serait beaucoup plus simple, mais c'est une affectation – Mike

+0

Ce code n'utilise pas BufferedReader, il utilise seulement BufferedWriter, Le seul problème est alors le HashMap. Le scanner est idéal, vous pouvez l'utiliser et il lit mot à mot –

0

Il en est, il est beaucoup plus simple si vous ne pouvez pas utiliser HashMap ou BufferedReader:

import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.util.LinkedList; 
import java.util.Scanner; 

public class WordCounter 
{ 
    public static void main(String[] args) throws Throwable 
    { 
     File inputFile = new File("input.txt"); 
     File outputFile = new File("output.txt"); 
     Scanner scanner = new Scanner(inputFile); 
     LinkedList<Word> words = new LinkedList<Word>(); 

     while (scanner.hasNext()) 
     { 
      String word = scanner.next(); 
      addWord(words, word); 
     } 
     scanner.close(); 

     WriteToFile(outputFile, words); 
    } 

    private static void WriteToFile(File outputFile, LinkedList<Word> words) throws IOException 
    { 
     BufferedWriter writer = new BufferedWriter(new FileWriter(outputFile)); 
     for (Word word : words) 
     { 
      writer.write("#" + word.getWord() + " " + word.getCount() + "\r\n"); 
     } 
     writer.close(); 
    } 

    private static void addWord(LinkedList<Word> words, String word) 
    { 
     for (Word aWord : words) 
     { 
      if (aWord.getWord().equals(word)) 
      { 
       aWord.incrementCount(); 
       return; 
      } 
     } 
     words.add(new Word(word, 1)); 
    } 
} 

class Word 
{ 
    private String word; 
    private int count; 

    public Word(String word, int count) 
    { 
     this.word = word; 
     this.count = 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; 
    } 

    public void incrementCount() 
    { 
     count++; 
    } 

    @Override 
    public String toString() 
    { 
     return "Word: " + word + " Count: " + count; 

    } 

}