Java重定向标准输入/输出
程序员文章站
2024-02-03 17:05:58
...
重定向IO
Java标准输入是 System.in, 代表键盘
标准输出是 System.out, 代表显示器。
System类提供下面重定向标准IO。
- setErr(PrintStream err): 重定向标准错误
- setIn(InputStream in): 重定向标准输入
- setOut(PrintStream out): 重定向标准输出
下面将标准输出重定向到文件
try(
PrintStream printStream = new PrintStream(new FileOutputStream("abc.txt"))
){
System.setOut(printStream);
System.out.println("test 字符串");
System.out.println(new FileTest());
}
catch (IOException e){
e.printStackTrace();
}
下面重定向标准输入到文件,而不是键盘
try (
FileInputStream fis = new FileInputStream("abc.txt");
){
System.setIn(fis);
Scanner scanner = new Scanner(System.in);
scanner.useDelimiter("\n");
while (scanner.hasNext()){
System.out.println(scanner.next());
}
}
catch (IOException e){
}
读取其他进程的数据
使用 Runtime 对象的 exec()方法可以运行平台上的其他程序。
该方法产生一个Process对象,Process对象代表由java程序启动的子进程。
Process类提供下面三个方法:
- getErrorStream(): 子进程错误流
- getInputStream(): 子进程输入流
- getOutputStream(): 子进程输出流
下面例子启动 javac 程序:输出错误流
Process process = Runtime.getRuntime().exec("javac");
try (
BufferedReader br = new BufferedReader(new InputStreamReader(process.getErrorStream()))
){
String buff = null;
while ((buff = br.readLine()) != null){
System.out.println(buff);
}
}
catch (IOException e){
}
读取输入流
Process process = Runtime.getRuntime().exec("ls -l");
try (
BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()))
){
String buff = null;
while ((buff = br.readLine()) != null){
System.out.println(buff);
}
}