BufferedReader br = new BufferedReader(new FileReader("shark-data.txt"));
String fileRead = br.readLine();
PrintStream out = new PrintStream(new FileOutputStream("results.txt"));
System.setOut(out);
Le code fonctionne, il crée un nouveau fichier texte et met ma sortie de la console dans le fichier texte. Le problème est que rien n'apparaît sur ma console. Comment puis-je réparer ça?
3 réponses
Vous devez d'abord créer une classe dans laquelle vous héritez de l'interface OutputStream pour implémenter le modèle d'adaptateur (je ne sais pas encore si c'est l'adaptateur)
Alors vous pouvez utiliser cette classe comme ci-dessous
PRINCIPAL
PrintStream finalStream;
TreeOutputStream tos;
PrintStream out;
out = new PrintStream("logs.txt");
tos = new TreeOutputStream();
tos.add(out);
tos.add(System.out);
finalStream = new PrintStream(tos);
System.setOut(finalStream);
TreeOutputStream
public class TreeOutputStream extends OutputStream{
private final List<OutputStream> streams;
public void add(OutputStream os){
streams.add(os);
}
public void remove(OutputStream os){
streams.remove(os);
}
public TreeOutputStream() {
streams = new ArrayList<>();
}
@Override
public void write(int i) throws IOException {
streams.stream().forEach(strm->{
try {
strm.write(i);
} catch (IOException ex) {
Logger.getLogger(TreeOutputStream.class.getName()).log(Level.SEVERE, null, ex);
}
});
}
}
Que se passe-t-il que votre flux sortant boucle sur tous les flux appelant leur méthode d'écriture
Avant d'exécuter System.setOut enregistrer la console standart,
Standard PrintStream = System.out;
Pour imprimer à nouveau sur la console, vous devez passer à la console standard en utilisant ci-dessous, que Vous pouvez imprimer sur la console.
System.setOut (standard); System.out.println ("Bonjour!");
Vous pouvez utiliser TeeOutputStream
d'Apache commons-io pour diviser le flux en deux: https://commons.apache.org/proper/commons-io/javadocs/api-2.5/org/apache/commons/io/output/ TeeOutputStream.html
OutputStream fos = new FileOutputStream("results.txt");
OutputStream consoleOut = System.out;
PrintStream newOut = new PrintStream(new TeeOutputStream(consoleOut, fos));
System.setOut(newOut);
Cela créera une écriture PrintStream
à la fois dans l'original System.out
(c'est-à-dire dans la console) et dans votre fichier.
Dans Maven, voici l'extrait de dépendance que vous pouvez utiliser pour ajouter commons-io à votre projet:
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
De nouvelles questions
java
Java est un langage de programmation de haut niveau. Utilisez cette balise lorsque vous rencontrez des problèmes pour utiliser ou comprendre la langue elle-même. Cette balise est rarement utilisée seule et est le plus souvent utilisée en conjonction avec [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] et [maven].