12.16

发布时间 2023-12-19 23:55:08作者: 酥饼馅红豆沙

在 Java 中,可以使用 System.setIn() 和 System.setOut() 方法来重定向标准输入和标准输出。这两个方法可以将标准输入流和标准输出流分别重定向到其他输入流和输出流,从而实现输入输出的重定向。

以下是一个简单的示例,演示了如何使用 System.setIn() 和 System.setOut() 方法来重定向标准输入和标准输出:

import java.io.*;

public class RedirectExample {
    public static void main(String[] args) {
        try {
            // 保存原始的标准输入流和标准输出流
            InputStream originalIn = System.in;
            PrintStream originalOut = System.out;

            // 创建一个 ByteArrayInputStream 作为新的标准输入流
            String input = "Hello, redirected input!";
            ByteArrayInputStream inputStream = new ByteArrayInputStream(input.getBytes());
            System.setIn(inputStream);

            // 创建一个 ByteArrayOutputStream 作为新的标准输出流
            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
            PrintStream printStream = new PrintStream(outputStream);
            System.setOut(printStream);

            // 读取重定向后的标准输入流
            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
            System.out.println("Reading from redirected input: " + reader.readLine());

            // 写入重定向后的标准输出流
            System.out.println("This is redirected output!");

            // 恢复原始的标准输入流和标准输出流
            System.setIn(originalIn);
            System.setOut(originalOut);

            // 打印重定向后的标准输出流内容
            System.out.println("Redirected output: " + outputStream.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

  

在这个示例中,我们首先保存了原始的标准输入流和标准输出流。然后,创建了一个 ByteArrayInputStream 作为新的标准输入流,并将其设置为当前的标准输入流。同时,创建了一个 ByteArrayOutputStream 作为新的标准输出流,并将其设置为当前的标准输出流。接下来,我们可以读取重定向后的标准输入流和写入重定向后的标准输出流。最后,我们恢复了原始的标准输入流和标准输出流,并打印了重定向后的标准输出流内容。

通过这种方式,我们可以在 Java 中实现标准输入输出的重定向,从而实现对输入输出的控制和定制。