2009-11-01 5 views
1

J'essaie de faire lire ma demande dans un fichier texte et de rechercher une chaîne. Si la chaîne n'existe pas, elle le fait en utilisant println. Le seul problème que j'ai est qu'il ne semble pas lire le fichier texte. Ce que j'ai jusqu'ici est:Vérification d'un fichier pour une certaine chaîne en Java

PrintWriter itemwriter = new PrintWriter(new FileOutputStream(items)); 
FileInputStream fstream = new FileInputStream(items); 
DataInputStream in = new DataInputStream(fstream); 
BufferedReader br = new BufferedReader(new InputStreamReader(in)); 

String strLine; 

while ((strLine = br.readLine()) != null) { 
    if (strLine.contains(name)) { 
     //do nothing, the item already is in the database. 
    } else { 
     itemwriter.println(name); 
} 

Cela ne semble pas fonctionner cependant. Aucune suggestion?

Répondre

3

Vous essayez de lire et d'écrire dans le même fichier en même temps. Bien qu'il puisse y avoir un moyen de faire fonctionner cela, ça va être difficile. Je vous suggère de lire le fichier A et d'écrire dans le fichier B - et si vous voulez remplacer efficacement le fichier d'entrée, vous pouvez le faire avec une séquence de mouvements et de suppressions à la fin.

Quelques autres suggestions:

  • Vous devriez avoir try/finally blocs pour fermer l'entrée et la sortie à la fin. Vous n'avez pas besoin d'utiliser un DataInputStream - vous n'utilisez rien de celui-ci. Juste envelopper le flux d'entrée directement.
  • Je vous suggère de spécifier explicitement le codage pour l'entrée et la sortie plutôt que de faire confiance au codage par défaut. Il est plus robuste d'utiliser OutputStreamWriter (ou quelque chose de similaire) plutôt que PrintWriter - actuellement, vous n'allez pas détecter si quelque chose ne va pas lorsque vous écrivez.

donc quelque chose comme ceci:

// Ideally have this as a constant somewhere. 
Charset utf8 = Charset.forName("UTF-8"); 

BufferedReader reader = new BufferedReader(new InputStreamReader(
    new FileInputStream(inputFile), utf8); 
try { 
    try { 
    BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(
     new FileOutputStream(outputFile), utf8); 

    String line; 
    while ((line = reader.readLine()) != null) { 
     if (!line.contains(name)) { 
     writer.write(line); 
     writer.newLine(); 
     } 
    } 
    } finally { 
    writer.close(); 
    } 
} finally { 
    reader.close(); 
} 
// Now if you want to shift files around, do it here 

Il est dommage que Java fait cela pour Checklist avec les try/finally blocs. Oh pour les instructions using de C# ...

0

Tout d'abord, vous ne devriez pas utiliser Streams. Utilisez FileReaders et FileWriters.

Si vous avez besoin de plus d'aide poster votre SSCCE montrant le problème.

+0

Il utilise déjà des lecteurs et des rédacteurs - ils ne font que contourner les flux de fichiers, ce qui est tout à fait raisonnable. IMO les encodages doivent être spécifiés explicitement, mais c'est une question légèrement différente. –

+0

'FileReader' et' FileWriter' reprennent n'importe quel jeu de caractères par défaut. Il vaut mieux être explicite, ce qui indique l'utilisation des flux et des convertisseurs ('InputStreamReader' et' OutputStreamWriter'.) –

+0

Et il publie déjà le code courant (bien, vous devez ajouter 4 lignes dont deux sont '}') – OscarRyz

Questions connexes