一、其他
1、System.in、System.out(标准输入、输出流)
System.in:标准的输入流,默认从键盘输入。
System.out:标准的输出流,默认从控制台输出。
改变标准输入输出(System下的静态方法)。
void setIn(InputStream in):重新分配\”标准\”输入流
void setOut(PrintStream out):重新分配\”标准\”输出流
2、PrintStream、PrintWriter(打印流)
代码示例:将内存数据打印到文件
public class Main {public static void main(String[] args) {try {FileOutputStream fos = new FileOutputStream(new File(\"F:\\\\hello.txt\"));// 创建打印输出流,设置为自动刷新模式(写入换行符或字节 \'\\n\' 时都会刷新输出缓冲区)PrintStream ps = new PrintStream(fos, true);// 把标准输出流(控制台输出)改成文件System.setOut(ps);for (int i = 0; i <= 15; i++) {System.out.print(i);if (i % 5 == 0) {System.out.println();}}} catch (Exception e) {}}}// 结果.文件:F:\\\\hello.txt// 内容:0123456789101112131415
代码示例:打印系统环境信息
public class Main {public static void main(String[] args) throws Exception {Properties properties = System.getProperties();properties.list(new PrintStream(\"F:\\\\hello.txt\"));}}
3、DataInputStream 、DataOutputStream(数据流)
作用:用于读取或写出基本数据类型的变量或字符串。
代码示例:写。将内存中的字符串、基本数据类型的变量写出到文件中。
public class Main {public static void main(String[] args) {try (DataOutputStream dos = new DataOutputStream(new FileOutputStream(\"data.dat\"));) {dos.writeUTF(\"张三\");dos.writeInt(23);dos.writeBoolean(true);dos.flush(); // 刷新操作,将内存中的数据写入文件} catch (Exception e) {}}}
代码示例:读。将文件中的数据读到内存中。需要与保存的数据的顺序一致!
public class Main {public static void main(String[] args) {try (DataInputStream dis = new DataInputStream(new FileInputStream(\"data.dat\"));) {String name = dis.readUTF();int age = dis.readInt();boolean isMale = dis.readBoolean();System.out.println(\"name = \" + name);System.out.println(\"age = \" + age);System.out.println(\"isMale = \" + isMale);} catch (Exception e) {}}}
4、管道输入流、管道输出流
管道输入/输出流和普通的文件输入/输出流或者网络输入/输出流不同之处在于,它主要用于线程之间的数据传输,而传输的媒介为内存。
管道输入/输出流主要包括了如下4种具体实现:PipedOutputStream、PipedInputStream、PipedReader和PipedWriter,前两种面向字节,而后两种面向字符。
代码示例:
public class Main {public static void main(String[] args) {try (PipedWriter out = new PipedWriter();PipedReader in = new PipedReader();) {// 将输入流和输出流进行连接,否则会出现IO错误out.connect(in);// 开启一个线程用于读取管道流new Thread(new Print(in), \"printThread\").start();// 接收键盘的输入,并写入到管道流中int receive = 0;while ((receive = System.in.read()) != -1) {out.write(receive);}} catch (Exception e) {}}static class Print implements Runnable {private final PipedReader in;public Print(PipedReader in) {this.in = in;}@Overridepublic void run() {int receive = 0;try {while ((receive = in.read()) != -1) {System.out.print((char) receive);}} catch (IOException ex) {}}}}
上述代码,创建了线程printThread,它用来接收main线程的输入,任何main线程的输入均通过PipedWriter写入,而printThread在另一端通过PipedReader将内容读出并打印。
注意:对于Piped类型的流,必须先要进行绑定,也就是调用connect()方法,如果没有将输入/输出流绑定起来,对于该流的访问将会抛出异常。
参考文档:《Java并发编程的艺术》