J'ai un simple fichier de dictionnaire de texte, qui contient des mots, séparés par ';' Mon problème est de lire tous les mots et les stocker dans la carte sans charger tous les fichiers dans une chaîne (Le fichier de dictionnaire peut être très énorme). Voici mon code, où je suis en train d'imprimer ces mots à une console:Lire un caractère et ajouter à une chaîne tampon java
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Map;
public class Dictionary {
private static Dictionary instance;
private Map DictionaryMap;
private String delimiter;
private Dictionary() {
}
private Dictionary(String dictfile, String delimiter) throws FileNotFoundException, IOException
{
FileReader fr = new FileReader(dictfile);
int position = 0;
StringBuffer buffer = new StringBuffer();
while ((position = fr.read()) != -1) {
char symbol = (char) fr.read();
if(symbol != ';') {
buffer.append(symbol);
System.out.println("Char is : "+symbol+" ;");
} else {
System.out.println("String is "+buffer+" ;");
buffer.delete(0, buffer.length()-1);
}
}
}
public void loadFromFile(File dictfile, String delimiter) {
}
public String getDelimiter() {
return delimiter;
}
public void setDelimiter(String delimiter) {
this.delimiter = delimiter;
}
Mais quand je suis en train d'exécuter ce code sur exemple de fichier dict.txt, qui contient:
test1; test2;
Certains des symboles entre délimiteur (char ';') n'a pas affiche:
Char est: e; Char est: t; String est et; Char est: e; Char est: t; Char est:;
Char est: \ uffff;
Ma question pourquoi cela ne fonctionne pas correctement et comment lire les caractères de fileinputstream (dans mon cas) sans type casting?
Commentaires généraux. Si le fichier est volumineux, vous pouvez améliorer la vitesse en utilisant BufferedReader à la place. Cela va lire le fichier en morceaux dans un tampon interne. Vous avez besoin de toute la vitesse que vous pouvez obtenir en traitant des fichiers. Une méthode alternative de lecture à partir du fichier est StreamTokenizer où vous pouvez spécifier le délimiteur ("," dans votre cas) et il va vous nourrir des jetons. – Optimist