JavaSE IO流PrintStream问题

平平无奇的一块板砖 2020-09-29 02:30:44

public static void main(String[] args) {
File file = new File("D:\\a.txt");
PrintStream ps = null;
try {
PrintStream pp = System.out;
ps = new PrintStream(file);
System.setOut(ps);
System.out.println("AAAAAAAAAAAAAAAAA");
System.out.println("球");
System.setOut(pp);
System.out.println("PPPPPPPPPPPPPPPP");
ps.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
ps.close();
}
}

会将AAAAAAAAAAAAAAAAA和球写进a.txt中 ,将PPPPPPPPPPPPPPPP在控制台输出


改一下

public static void main(String[] args) {
File file = new File("D:\\a.txt");
PrintStream ps = null;
try {
ps = new PrintStream(file);
System.setOut(ps);
System.out.println("AAAAAAAAAAAAAAAAA");
System.out.println("球");
PrintStream pp = System.out;
System.setOut(pp);
System.out.println("PPPPPPPPPPPPPPPP");
ps.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
ps.close();
}
}

所有信息都会被写进a.txt
请问问什么,望解决
...全文
178 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
qybao 2020-09-29
  • 打赏
  • 举报
回复
分析都在注释里
public static void main(String[] args) {
File file = new File("D:\\a.txt");
PrintStream ps = null;
try {
PrintStream pp = System.out; //这里的System.out; 是系统标准输出(默认是控制台),所以pp指向系统标准输出
ps = new PrintStream(file);
System.setOut(ps); //这里setOut后,System.out=ps,也就是System.out也指向了文件(注意这里pp本身不变,还是指向系统标准输出,就好比 int a=5; int b=a; a=10; b保持5不变,所以同理pp不变)
System.out.println("AAAAAAAAAAAAAAAAA"); //所以这里会输出到文件
System.out.println("球");
System.setOut(pp); //这里setOut后,System.out=pp=系统标准输出
System.out.println("PPPPPPPPPPPPPPPP"); //所以这里就会输出到控制台
ps.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
ps.close();
}
}


public static void main(String[] args) {
File file = new File("D:\\a.txt");
PrintStream ps = null;
try {
ps = new PrintStream(file); //ps指向文件
System.setOut(ps); //这里setOut以后,System.out=ps,所以System.out也指向文件
System.out.println("AAAAAAAAAAAAAAAAA"); //所以这里会输出到文件
System.out.println("球");
PrintStream pp = System.out; //这里pp=System.out; 因为System.out=ps,所以相当于 pp=ps; 所以pp也指向文件
System.setOut(pp); //所以这里setOut后,System.out还是指向文件
System.out.println("PPPPPPPPPPPPPPPP"); //所以这里会输出到文件
ps.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
ps.close();
}
}
qq_39936465 2020-09-29
  • 打赏
  • 举报
回复
引用 楼主 Shcm@313 的回复:
所有信息都会被写进a.txt 请问问什么,望解决
system.out默认是控制台输出,第一个pp在system.out改变之前保存了默认配置, 第二次system.out已经改变,所以pp=ps。这个不是很难理解吧。

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧