7
votes

Process Inpurstream

Comment puis-je "modifier" une intrigue? J'ai un fichier comme entrée, je voudrais modifier une variable et transmettre une nouvelle introuvable.

Par exemple, l'intrigue initiale contient Hello $ {VAR}. Ensuite, je veux "modifier" cette intrustream avec Var = "World", résultant d'un World Bonjour introuvable.

Quelle est la meilleure pratique pour faire cela? Merci.


0 commentaires

3 Réponses :


12
votes

the java.io est un et tous modèle de décorateur . Utilisez-le et créez une classe que étend InputStream (peut-être DataGuTream ou meilleur, certains lecteur puisque vous êtes réellement intéressé par des caractères, pas en octets, mais ALA), ajoutez un constructeur qui prend l'original InputStream et remplacer les méthodes Lecture () Pour lire le flux d'origine, tampon-la-tampon à un certain degré (par exemple à partir de $ { jusqu'à avec le premier code } ) puis déterminez la clé et renvoyez les données modifiées à la place.

Si vous appelez votre nouvelle classe formatedInputStream , alors vous pouvez retourner nouveau formatDeDInputStream (originalInputtream) à la fineuse et que l'utilisateur ne soit toujours pas d'attribuer et de l'utiliser en tant que introuvable .


1 commentaires

Salut @Ballusc est votre réponse applicable aux fichiers Excel aussi? J'aimerais modifier l'intrigue et l'envoyer à l'utilisateur. Voici mon message: Stackoverflow.com/questions/34893954/... Merci.



4
votes

Vous pouvez essayer de sous-classement FiltreInputtream .

de la DOCS: P>

Un filtreInputtream contient un autre flux d'entrée, qu'il utilise comme source de base de données, éventuellement transformer les données en cours de route forte> ou fournissant des fonctionnalités supplémentaires. La classe filtreInputtream lui-même remplit simplement toutes les méthodes d'introuvream avec des versions qui transmettent toutes les demandes au flux d'entrée contenue. Les sous-classes de filtreInputtream peuvent ultérieurement remplacer certaines de ces méthodes et peut également fournir des méthodes et des champs supplémentaires. Em> p> BlockQuote>

Voici un coup de poignard initial. Pas le meilleur moyen de le résoudre. Vous voulez probablement remplacer quelques méthodes supplémentaires et peut-être aller avec un lecteur à la place. (Ou peut-être même utiliser un scanner et traiter la ligne de fichier par ligne.) P> xxx pré>

sortie: p>

Hello world, this is the value one 789 and this is the value two 123


2 commentaires

C'est exactement pourquoi j'ai suggéré DataGuTretstream :) (qui est une sous-classe de celui-ci). Cependant, après tout, en utilisant un lecteur ( INPUTStreamreader ) est plus facile.


Aha, je n'ai pas réalisé que Datatagutstream était un filtreInputtream. (A du sens cependant.) Alors, que fournit DataGuTretstream ce filtreInputStream ne le fait pas (c'est utile dans cette situation.)



2
votes

Vous pouvez utiliser streamflyer qui prend en charge les remplacements de texte dans des flux de caractères hors de la boîte .


0 commentaires