Bu eski bir sorudur, ancak ortaya çıkıyor Google aramada her zaman ve ben bunu düzeltmek istedim. Aslında, FileDescriptor
sınıfını kullanarak alabilirsiniz. new PrintStream(new FileOutputStream(FileDescriptor.out)))
numaralı telefonu arayarak, stdout'a basan bir şey vermelisiniz. Kabul cevap yanlışsa
import java.io.FileDescriptor;
import java.io.FileOutputStream;
import java.io.PrintStream;
public static void main(String [] args) {
System.err.println("error.");
System.out.println("out.");
System.setOut(System.err);
System.out.println("error?");
System.setOut(new PrintStream(new FileOutputStream(FileDescriptor.out)));
System.out.println("out?");
}
bu daha upvoted değildir gelmek nasıl ... – Jas
sen açıklayabilir misiniz ('System.setOut (stdout) yani eğer;' olarak beklenen çalışır)? Orijinal akışınızı depolamak için yönteminize bir avantaj var mı? Ayrıca, 'System.out' ve benzerlerinin hepsinin 'final' olarak işaretlendiğini, Java'nın setOut() 'un kapakların altında nasıl işlendiğine dair herhangi bir fikir verebileceğinizi merak ediyorum. – dimo414
'System.out' ve' System.err', temel yerel C kodu tarafından işlenir. Onlar "final" olarak işaretlenirler, böylece sanal gerçeklik "farketmeksizin" işaretçi değerleri değiştirilmez. Sağlanan “setOut()” yöntemi, yerel parçanın dahili referanslarını ayarlamasına izin vermek için gereklidir. – ksmonkey123