J'ai une fonction qui prend un objet d'un certain type, et un PrintStream
à imprimer, et affiche une représentation de cet objet. Comment puis-je capturer la sortie de cette fonction dans une chaîne? Plus précisément, je veux l'utiliser comme dans une méthode toString
.Java: PrintStream à chaîne?
90
A
Répondre
156
Utilisez un ByteArrayOutputStream
comme tampon:
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.nio.charset.StandardCharsets;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos, true, "utf-8");
yourFunction(object, ps);
String content = new String(baos.toByteArray(), StandardCharsets.UTF_8);
ps.close();
22
Vous pouvez construire un PrintStream avec un ByteArrayOutputStream passé dans le constructeur que vous pouvez utiliser plus tard pour saisir le texte écrit à la PrintStream.
ByteArrayOutputStream os = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(os);
...
String output = os.toString("UTF8");
1
Peut-être que cette question pourrait vous aider: Get an OutputStream into a String
OutputStream Sous-classe et l'envelopper dans PrintStream
-1
Définir et initialiser une variable de scanner nommée INSS qui crée un flux de chaîne d'entrée en utilisant la variable chaîne myStrLine .
Ans: Scanner inSS = nouveau scanner (myStrLine);
2
Une unification des réponses précédentes, cette réponse fonctionne avec Java 1.7 et après. De plus, j'ai ajouté du code pour fermer les Streams.
final Charset charset = StandardCharsets.UTF_8;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos, true, charset.name());
yourFunction(object, ps);
String content = new String(baos.toByteArray(), charset);
ps.close();
baos.close();
Voulez-vous réduire le nom de variable 'S' par hasard? Tu me fais mal aux yeux. – Asaph
@ Asaph - n'hésitez pas à les éviter :-) – ChssPly76
N'oubliez pas de fermer le PrintStream pour libérer toutes les ressources. – tobr