Java使用System.setOut()对输出流进行重新分配

setOut: 改变输出流

public class App {
    public static void main(String[] args) throws FileNotFoundException {
        PrintStream console = System.out;
        PrintStream logFile = new PrintStream("/home/jaemon/console.out");

        System.out.println("start...");

        // 切换输出到文件
        System.setOut(logFile);
        System.setErr(logFile);

        for (int i = 1; i < 6; i++) {
            System.out.println("key_" + i);
            // 同时输出到控制台
            console.println("key_" + i);
        }

        // 切换输出到控制台
        System.setOut(console);
        System.setErr(console);

        System.out.println("end...");
    }
}

控制台数据

start...
key_1
key_2
key_3
key_4
key_5
end...

console.out 文件内容

key_1
key_2
key_3
key_4
key_5

 

setIn: 改变输入流

public class App {
    public static void main(String[] args) throws FileNotFoundException {
 		InputStream console = System.in;
        InputStream logFile = new FileInputStream("/home/jaemon/console.out");

        // 从文件中读取输入
        System.setIn(logFile);
        Scanner scanner = new Scanner(System.in);

        while (scanner.hasNextLine()) {
            System.out.println(scanner.nextLine());
        }
        System.out.println("-----------------------");

        // 从控制台读取输入
        System.setIn(console);
        scanner = new Scanner(System.in);

        while (scanner.hasNextLine()) {
            System.out.println(scanner.nextLine());
        }       
    }
}

控制台输出

key_1
key_2
key_3
key_4
key_5
-----------------------
...		// 控制台读取输入    
下面是我对这段 Java 代码的一些优化建议: 1. 减少重复代码:如果用户输入的 IP 地址和端口号不符合格式要求,则会要求用户重新输入,这段代码重复了两次。可以将这段代码封装成一个方法,以便在需要时调用。 2. 使用常量:将字符串常量放到常量池中,以便重复使用。例如,可以将字符串“ipAddress”和“port”放到常量池中。 3. 避免不必要的类型转换:将字符串转换为整数时,应该使用 parseInt() 方法,而不是 valueOf() 方法。这可以减少不必要的对象创建和内存分配。 4. 使用 try-with-resources:在使用 JSch 会话时,应该使用 try-with-resources 语句,以确保会话和通道在使用完毕后正确关闭。 5. 使用日志输出使用日志输出代替 System.out.println() 方法,以便更好地控制日志输出和记录。 下面是优化后的代码: ``` public static void getLinux() { System.out.println("请输入 IP 地址和 Linux 的端口,示例:127.0.0.1:22"); String temp = sc.nextLine(); String[] ipPort = temp.split(":"); if (ipPort.length == 2) { logger.info("登录 IP:" + ipPort[0]); LinuxCache.ipCache.put("ipAddress", ipPort[0]); logger.info("登录端口:" + ipPort[1]); LinuxCache.ipCache.put("port", ipPort[1]); } else { System.out.println("<>请输入正确格式<>"); getLinux(); return; } if (!StringUtils.isBlank(LinuxCache.ipCache.get("dockerIp"))) { return; } String ipAddress = LinuxCache.ipCache.get("ipAddress"); int port = Integer.parseInt(LinuxCache.ipCache.get("port")); JSch jsch = new JSch(); System.out.println("请输入用户名:"); String username = sc.nextLine(); System.out.println("请输入密码:"); String password = sc.nextLine(); try { try (Session session = jsch.getSession(username, ipAddress, port)) { session.setPassword(password); session.setConfig("StrictHostKeyChecking", "no"); session.connect(100000); logger.info("登录成功"); LinuxCache.ipCache.put("dockerIp", ipAddress); logger.info("dockerIp缓存成功"); } } catch (Exception e) { logger.error("连接错误,请重新输入连接信息", e); getLinux(); } } ``` 希望这些优化建议能帮助到您。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jaemon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值