2011-05-26 2 views
0

J'ai l'impression que c'est une mauvaise pratique de stocker un fichier dans une chaîne. Existe-t-il une autre façon de faire cela, parce que je veux comparer une liste de clés et faire un indexOf (clé) sur le fichier. La clé pourrait être n'importe où dans le fichier.Stocker un fichier dans une chaîne

+1

Pourquoi pensez-vous que c'est une mauvaise pratique? Cela me semble raisonnable. Les fichiers sont-ils très gros (ou très nombreux)? – DNA

+0

Par fichier dans une chaîne, vous voulez dire "texte tiré d'un fichier", non? – jzd

+0

Une autre façon de faire QUOI? Quel est le moyen de chercher des alternatives? – khachik

Répondre

1

Vous pouvez utiliser un BufferedReader pour tirer dans les données d'un morceau à la fois:

BufferedReader reader = new BufferedReader(
      new FileReader(file)); 
    char[] buf = new char[1024]; 
    int numRead=0; 
    while((numRead=reader.read(buf)) != -1){ 
     String readData = String.valueOf(buf, 0, numRead); 

...

et tester chaque petite chaîne. Vous auriez besoin de garder une trace de l'index, mais cela utiliserait beaucoup moins de mémoire.

+0

Je tapais juste la même chose. Téléphone stupide :) –

1

Un String devrait être très bien tant qu'il tient dans la mémoire sans problèmes.

Une encore meilleure options est peut-être de faire un passage sur le fichier et stocker les clés dans un HashSet, ou dans un HashMap mappage par exemple les mots-clés à leurs décalages dans le fichier.

+0

ou utiliser la hashmap pour mapper les hashs (raccourcis) des clés avec les décalages potentiels –

0

Si vos fichiers sont volumineux et que vous tentez uniquement d'effectuer une opération indexOf, il peut être préférable de charger le fichier en mémoire par étapes. Définir un tampon approprié sur un BufferedReader, puis lire dans le tampon. Effectuez votre opération indexOf. Si cela échoue, répétez cette opération, mais ajoutez la taille du nombre de caractères que votre tampon lit à la valeur de retour de la fonction indexOf.

0

Selon la raison pour laquelle vous utilisez le fichier de cette manière, cela peut être une mauvaise pratique. Mais, généralement, ce n'est pas le cas.

Si vous utilisez le fichier en tant que fichier de propriétés glorifié, vous devrez peut-être reformater le texte dans le fichier et le lire en tant que fichier de propriétés.

Si vous pouviez stocker les clés et les valeurs dans une base de données, cela serait une meilleure solution que de rechercher une chaîne.

Mais si vous avez un fichier texte que vous cherchez à trouver s'il contient certains mots-clés, alors vous utilisez déjà la solution la plus simple.

Questions connexes