将控制台的信息写入到文件

本文介绍了一个 Java 程序示例,演示了如何使用 ByteArrayOutputStream 和 PrintStream 类进行文本输出,并将输出内容重定向到文件中。此外,还展示了如何在运行时切换 System.out 的输出目标。

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;


public class stream {
 
 public static void main(String args[]) throws IOException
 {
  PrintStream oldPrintStream = System.out;   
  File file = new File("c://tex.txt");
  ByteArrayOutputStream bos = new ByteArrayOutputStream();
  System.setOut(new PrintStream(bos));      
  System.out.println("this is the text to output 汗字");      
  System.setOut(oldPrintStream);   
  System.out.println(bos.toString()+"asdasd");
  FileOutputStream fs = new FileOutputStream(file);
   byte bytes[] = bos.toString().getBytes();
   fs.write(bytes);
   fs.close();
 }
}
 

在PyCharm中将控制台输出保存到文件有多种方法: - **使用`io`和`sys`模块重定向输出**:使用Python的内置模块`io`和`sys`将控制台输出重定向到文件。创建一个函数,该函数接受文件路径作为参数,并返回一个可写入控制台所有输出的文件对象[^1]。 - **创建文件并指定输出文件**:创建一个TXT文件,指定文件路径和名称。将`sys.stdout`重定向到该文件,在`print`语句中指定`file`参数为该文件对象,最后关闭文件。示例代码如下: ```python import sys # 创建一个txt文件文件名为mytxtfile def text_create(name): desktop_path = "C:\\Users\\Administrator\\PycharmProjects\\EmotionRecog\\venv\\Scripts\\src\\mylog\\" # 新创建的txt文件的存放路径 full_path = desktop_path + name + '.txt' # 也可以创建一个.doc的word文档 file = open(full_path, 'w') filename = 'log' text_create(filename) output = sys.stdout outputfile = open("C:\\Users\\Administrator\\PycharmProjects\\EmotionRecog\\venv\\Scripts\\src\\mylog\\" + filename + '.txt', 'w') sys.stdout = outputfile # 运算部分 accuracy = 0.8 print('accuracy = ', accuracy*100, file=outputfile) outputfile.close() # close后才能看到写入的数据 ``` 重点是`print`里面要说明`file=outputfile`,并且程序末尾要关闭文件,不然都不会成功。不过这种方法会使控制台不输出结果[^2]。 - **自定义`Logger`类**:在代码开头加入自定义的`Logger`类,将控制台的结果输出到指定文件。示例代码如下: ```python import sys class Logger(object): def __init__(self, filename='default.log', stream=sys.stdout): self.terminal = stream self.log = open(filename, 'w') def write(self, message): self.terminal.write(message) self.log.write(message) def flush(self): pass # 将控制台的结果输出到a.log文件,可以改成a.txt sys.stdout = Logger('a.log', sys.stdout) sys.stderr = Logger('a.log_file', sys.stderr) ``` 这样既可以在控制台看到输出,也会将输出保存到文件中[^3]。 - **自定义`console_direct_to_file`类**:自定义一个类来管理控制台输出的重定向。示例代码如下: ```python import sys class console_direct_to_file: def __init__(self): self.buff = '' self.__console__ = sys.stdout def write(self, output_stream): self.buff += output_stream def to_console(self): sys.stdout = self.__console__ print(self.buff) def to_file(self, file_path): f = open(file_path, 'w+') sys.stdout = f print(self.buff) f.close() def flush(self): self.buff = '' def reset(self): sys.stdout = self.__console__ if __name__ == "__main__": r_obj = console_direct_to_file() sys.stdout = r_obj # get output stream print('hello') print('there') # redirect to console r_obj.to_console() # redirect to file r_obj.to_file('out.log') # flush buffer r_obj.flush() # reset r_obj.reset() ``` 这种方法可以灵活地将输出定向到控制台文件,并且最后需要调用`reset`方法,否则会报错[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值