web-dev-qa-db-fra.com

Java: PrintStream to String?

J'ai une fonction qui prend un objet d'un certain type et un PrintStream sur lequel imprimer, et génère 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.

108
Nick Heiner

Utilisez un ByteArrayOutputStream comme tampon:

import Java.io.ByteArrayOutputStream;
import Java.io.PrintStream;
import Java.nio.charset.StandardCharsets;

    final ByteArrayOutputStream baos = new ByteArrayOutputStream();
    try (PrintStream ps = new PrintStream(baos, true, "UTF-8")) {
        yourFunction(object, ps);
    }
    String data = new String(baos.toByteArray(), StandardCharsets.UTF_8);
178
ChssPly76

Vous pouvez construire un PrintStream avec un ByteArrayOutputStream transmis au constructeur que vous pourrez utiliser ultérieurement pour récupérer le texte écrit dans le PrintStream.

ByteArrayOutputStream os = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(os);
...
String output = os.toString("UTF8");
29
Asaph

Unification des réponses précédentes, cette réponse fonctionne avec Java 1.7 et ultérieur. En outre, 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();
4
Kaelan Dawnstar

Peut-être que cette question pourrait vous aider: Obtenez un OutputStream dans une chaîne

Sous-classe OutputStream et envelopper dans PrintStream

1
Kamil Szot