2015-03-23 1 views
-1

Im en utilisant BufferedOutputStream pour écrire dans un fichier, il écrit la liste des fichiers et des répertoires dans e pilote spécifié, voici le code:Travailler avec BufferedOutputStream

import java.io.File; 
import java.nio.file.*; 
import java.io.*; 
import static java.nio.file.StandardOpenOption.*; 
public class DirectoryReader { 

static int spc_count=-1; 

static void Process(File aFile) 
{ 
String s; 
Path file = 
Paths.get("C:\\Java\\Files1.txt"); 
try 
{ 
OutputStream output= new 
BufferedOutputStream(Files.newOutputStream(file,CREATE)); 

spc_count++; 
String spcs = ""; 
byte [] data= new byte [2048 * 2048]; 
for (int i = 0; i < spc_count; i++) 
spcs += " "; 
if(aFile.isFile()) 
{ 
System.out.println(spcs + "[FILE] " + aFile.getPath()); 
s=aFile.getPath(); 
System.out.println(" " + s); 
data = s.getBytes(); 
output.write(data); 
output.write(13); 
output.write(10); 
output.flush(); 
} 
else if (aFile.isDirectory()) { 
{ 
System.out.println(spcs + "[DIR] " + aFile.getPath()); 
s=aFile.getPath(); 
data = s.getBytes(); 
output.write(data); 
output.write(13); 
output.write(10); 
output.flush(); 
} 
File[] listOfFiles = aFile.listFiles(); 
if(listOfFiles!=null) { 
for (int i = 0; i < listOfFiles.length; i++) 
Process(listOfFiles[i]); 
} else { 
System.out.println(spcs + " [ACCESS DENIED]"); 
} 
} 
output.close(); 
spc_count--; 
} 
catch(Exception e) 
    { 
    System.out.println("Message: " + e); 
    } 


} 


public static void main(String[] args) { 
String nam = "D:\\Notes"; 
File aFile = new File(nam); 
Process(aFile); 
} 

} 

mais quand je vais voir le fichier, je trouve que le dernier fichier écrit et parfois je trouve des mots mélangés.

+0

Veuillez fournir le programme complet; votre extrait de code ne montre pas comment la sortie est initialisée; d'où proviennent les données, et ainsi de suite ... – GhostCat

+0

J'ai ajouté le code complet comme vous le demandiez ... – hubosh

+0

Pensez à Apache Commons-IO et en particulier à http://commons.apache.org/proper/commons- io/javadocs/api-release/org/apache/commons/io/FileUtils.html # writeStringToFile (java.io.File,% 20java.lang.String) Avec cette classe utilitaire, vous pouvez accéder beaucoup plus facilement aux fichiers ... Vous pouvez donc éviter directement BufferedOutputStream. – mle

Répondre

0

Vous utilisez des appels récurrents à votre méthode Process. Cette méthode crée NEW FILE lors de l'exécution, donc le contenu précédent est simplement redéfini. Je suggérerais que vous deviez créer un flux de sortie, et le passer comme argument à chaque appel Process message. De cette façon, vous allez fournir un flux de sortie unique pour stocker des données. Et le problème sera parti.

+0

J'ai fait ce que vous avez dit et il a seulement stocké le premier nom de fichier .. – hubosh

+0

et j'ai essayé de comparer les noms de fichiers, mais aucune correspondance n'a été trouvée .. Je ne sais pas pourquoi, bien que le nom de fichier et la chaîne de fichier.getName() sont les mêmes – hubosh

+0

Et ce n'était pas le point? Pour lister tous les fichiers dirs et sous-répertoires en un seul fichier? – Antoniossss