2012-07-11 4 views
0

J'ai cette fonction qui itère dans un répertoire et est supposée lire dans chaque fichier et l'écrire dans un fichier HTML généré. Le BufferedReader devrait être lu correctement parce que j'utilise la même chose ailleurs. Cependant, dans le fichier HTML généré, je ne reçois que toutes les autres lignes de données des fichiers d'origine dans le répertoire. Voici la méthode qui devrait accomplir ceci:Impossible d'obtenir BufferedWriter pour écrire toutes les données d'un fichier

// Tests to see if "File" is actually a directory or file, 
// then writes out the file if it passes the test 
void writeFiles(File directory, BufferedWriter bw) { 
    try{ 
     for(File file : directory.listFiles()){ 
      if(!file.isDirectory()) {//is a file lets read it 
       FileInputStream filestream = new FileInputStream(file); 
       DataInputStream in = new DataInputStream(filestream); 
       BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
       String buff = new String(); 
       bw.write("<b>////////////////////////////////</b><br/>"); 
       bw.write("<b>File: " + file.getName() + "</b><br/>"); 
       bw.write("<b>////////////////////////////////</b><br/>"); 
       while((buff=br.readLine()) != null){ 
        bw.write(br.readLine() + "<br/>"); 
       } 
       bw.write("`<br/>`"); 
       bw.write("`<br/>`"); 

      }else {//will make it a recursive search 
       writeFiles(file, bw); 
      } 
     } 
    }catch(FileNotFoundException fnf){ 
     fnf.printStackTrace(); 
    } 
    catch(IOException io){ 
     io.printStackTrace(); 
    } 
} 

Je m'excuse pour la mauvaise mise en forme du code dans la question. À cause du HTML, le texte préformaté ne laissera pas mon code apparaître correctement. Cependant, je pense vraiment que j'ai un problème d'E/S de fichier dans mon code. Est-ce que quelqu'un a une idée de savoir si c'est le BufferedReader ou BufferedWriter? Merci.

+0

Vous devez déclarer le buff de chaîne comme ceci: 'buff String;'. Vous ne devriez pas l'initialiser, car il est toujours écrasé ici: '(buff = br.readLine())' –

Répondre

6

Voici votre problème:

while((buff=br.readLine()) != null){ 
    bw.write(br.readLine() + "<br/>"); 
} 

Vous appelez br.readLine() deux fois.

Essayez:

while((buff=br.readLine()) != null){ 
    bw.write(buff + "<br/>"); 
} 
+1

Fonctionne comme un charme. Merci. – ridecontrol53

Questions connexes