Je dois spécifier un OutputStream
pour une API que j'utilise, mais je n'ai pas vraiment besoin de la sortie. Java a-t-il un OutputStream
équivalent à > /dev/null
?
Je dois spécifier un OutputStream
pour une API que j'utilise, mais je n'ai pas vraiment besoin de la sortie. Java a-t-il un OutputStream
équivalent à > /dev/null
?
Réponses:
Depuis Java 11, il existe un utilitaire statique qui fait exactement ce dont vous avez besoin, une méthode de fabrique statique OutputStream.nullOutputStream()
:
Renvoie un nouveau OutputStream qui supprime tous les octets. Le flux renvoyé est initialement ouvert. Le flux est fermé en appelant la méthode close (). Les appels ultérieurs à close () n'ont aucun effet.
/**Writes to nowhere*/
public class NullOutputStream extends OutputStream {
@Override
public void write(int b) throws IOException {
}
}
OutputStream nullOutputStream = new OutputStream() { @Override public void write(int b) { } };
Java ne semble pas, mais Apache Commons IO le fait. Jetez un œil à ce qui suit:
J'espère que cela pourra aider.
Il n'est pas mentionné, donc je vais aussi ajouter Goyave de ByteStreams . nullOutputStream () , car certains pourraient préférer Guava à Apache Commons IO ou l'avoir déjà dans leur projet.
Remarque: si vous utilisez une ancienne version de Guava (de 1.0 à 13.0), vous souhaitez utiliser com.google.io.NullOutputStream .
Revoir les réponses déjà fournies -
Java n'a pas de NullOutputStream
classe. Vous pouvez cependant lancer le vôtre OutputStream
qui ignore toutes les données qui y sont écrites - en d'autres termes write(int b)
, write(byte[] b)
et write(byte[] b, int off, int len)
qui aura des corps de méthode vides. C'est ce que fait la NullOutputStream
classe Common IO .
Non, mais c'est assez facile à mettre en œuvre.
Voir cette question "Comment supprimer System.out.println de la base de code"
Et puis il vous suffit de:
System.setOut( DevNull.out );
Ou quelque chose comme ça :)
Java 11 a ajouté OutputStream.nullOutputStream ()
Il y a un nouveau garçon dans la ville, qui s'occupe de ça comme un charme, juste quelques lignes de code devraient fonctionner. Son JDK 11 et nullWriter () y ont été introduits, qui s'en charge. Voici le code pour traiter le même vieux problème, une nouvelle façon sans se soucier du système d'exploitation (OS).
String fileContent = "Welcome to StackOverflow readers !! Here goes the question link...";
Writer writer = Writer.nullWriter();
writer.write(fileContent);
writer.close();
J'espère que cela peut aider quelqu'un!
Je pense que c'est ce que vous recherchez, je recherchais la même chose: il s'agit de rediriger les flux de sortie à partir d'une erreur standard, standard dans les objets ProcessBuilder.
Blockquote
pb.redirectError( ProcessBuilder.Redirect.appendTo( new File( "NUL:" ) ) );
ByteArrayOutputStream
est ce que vous voulez (en supposant que l'API produira du texte). Juste instancier un nouveau.