2009-06-04 5 views
7

J'ai un composant "processeur" qui peut traiter un seul fichier, InputStream, Reader, etc.Existe-t-il un moyen facile de créer un InputStream Java composé de plusieurs fichiers ajoutés?

Pour diverses raisons, je me retrouve avec plusieurs fichiers volumineux au lieu d'un fichier volumineux.

Est-il possible de construire un flux d'entrée (ou lecteur) que: transparence « ajoute » tous ces fichiers afin que: 1) Le « processeur » ne sait pas où un fichier a commencé ou un autre a pris fin 2) Non 3) Chaque fichier est lu dans l'ordre afin que je ne paie pas le coût de chargement de tous les en mémoire et les ajouter avant que le processeur commence à lire?

Je suis sûr qu'il est possible d'écrire quelque chose comme ça, mais je me demande s'il en existe déjà un; ça fait un moment que j'ai fait des IO basés sur des fichiers.

Répondre

19

SequenceInputStream concatène plusieurs flux.

List<InputStream> opened = new ArrayList<InputStream>(files.size()); 
for (File f : files) 
    opened.add(new FileInputStream(f)); 
InputStream is = new SequenceInputStream(Collections.enumeration(opened)); 

La gestion des exceptions (non représentée) lors de l'ouverture de chaque fichier est importante; assurez-vous que tous les fichiers sont définitivement fermés, même si l'opération est annulée avant la création de SequenceInputStream.

+1

Merde, je connaissais les ruisseaux Piped, je ne savais pas que celui-ci existe, aurait dû jeter un meilleur coup d'oeil. Je vous remercie ! – Uri

4

Vous pouvez utiliser quelque chose comme SequenceInputStream pour lire un flux après l'autre.

Questions connexes