一、标准输入流
public static final InputStream in:标准输入流。通常该流对应于键盘输入或由主机环境或用户指定的另个输入源
自己实现键盘录入数据:
public class SystemInDemo { public static void main(String[] args) throws IOException { //public static final InputStream in:标准输入流 InputStream is = System.in; int by; while ((by = is.read()) != -1) { System.out.print((char) by); } //如何把字节流转换为字符流?用转换流 InputStreamReader isr = new InputStreamReader(is); //使用字符流能不能够实现一次读取一行数据呢?可以 //但是,一次读取一行数据的方法是字符缓冲输入流的特有方法 BufferedReader br = new BufferedReader(isr); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("请输入一个字符串:"); String line = br.readLine(); System.out.println("你输入的字符串是:" + line); System.out.println("请输入一个整数:"); int i = Integer.parseInt(br.readLine()); System.out.println("你输入的整数是:" + i); //自己实现键盘录入数据太麻烦了,所以Java就提供了一个类供我们使用 Scanner sc = new Scanner(System.in); } }
二、标准输出流
public static final PrintStream out:标准输出流。通过该流对应于显示输出或主机环境或用户指定的另一个输出目标
输出语句的本质:是一个标准的输出流
PrintStream ps = System.out;
PrintStream类有的方法,System.out都可以使用
示例代码:
public class SystemOutDemo { public static void main(String[] args) { //public static final PrintStream out:标准输出流 PrintStream ps = System.out; //能够方便地打印各种数据值 ps.print("hello"); ps.print(100); ps.println("hello"); ps.println(100); //System.out的本质是一个字节输出流 System.out.println("hello"); System.out.println(100); System.out.println(); // System.out.print(); } }
三、字节打印流
打印流分类:
字节打印流:PrintStream
字符打印流:PringWriter
打印流的特点:
只负责输出数据,不负责读取数据
永远不会抛出IOException
有自己的特有方法
字节打印流:
PrintStream(String fileName):使用指定的文件名创建新的打印流
使用继承父类的方法写数据,查看的时候会转码;使用自己特有方法写数据,查看数据原样输出
可以输出语句的目的地
public static void setOut(PrintStream out):重新分配"标准"输出流
示例代码:
public class PrintStreamDemo { public static void main(String[] args) throws IOException { //PrintStream(String fileName):使用指定的文件名创建新的打印流 PrintStream ps = new PrintStream("myOtherStream\\ps.txt"); //写数据 //字节输出流有的方法 // ps.write(97); //使用特有方法写数据 // ps.print(97); // ps.println(); // ps.print(98); ps.println(97); ps.println(98); //释放资源 ps.close(); } }
四、字符打印流
字符打印流构造方法
方法名 | 说明 |
PrintWriter(String file Name) | 使用指定的文件名创建一个新的PrintWrite,而不需要自动执行刷新 |
PrintWriter(Writer out,boolean autoFlush) | 创建一个新的PrintWriter out:字符输出流autoFlush:一个布尔值,如果为真,则println,printf,或format方法将刷新输出缓冲区 |
示例代码:
public class PrintWriterDemo { public static void main(String[] args) throws IOException { //PrintWriter(String fileName) :使用指定的文件名创建一个新的PrintWriter,而 // 不需要自动执行行刷新 // PrintWriter pw = new PrintWriter("myOtherStream\\pw.txt"); // pw.write("hello"); // pw.write("\r\n"); // pw.flush(); // pw.write("world"); // pw.write("\r\n"); // pw.flush(); // pw.println("hello"); /* pw.write("hello"); pw.write("\r\n"); */ // pw.flush(); // pw.println("world"); // pw.flush(); //PrintWriter(Writer out, boolean autoFlush):创建一个新的PrintWriter PrintWriter pw = new PrintWriter(new FileWriter("myOtherStream\\pw.txt"),true); // PrintWriter pw = new PrintWriter(new FileWriter("myOtherStream\\pw.txt"),false); pw.println("hello"); /* pw.write("\r\n"); pw.flush(); */ pw.println("world"); pw.close(); } }
五、复制Java文件打印流改进
需求:
把模块目录下的PrintStreamDemo.java 复制到模块目录下的 Copy.java
分析步骤:
根据数据源创建字符输入流对象
根据目的地创建字符输出流对象
读写数据,复制文件
释放资源
代码实现:
public class CopyJavaDemo { public static void main(String[] args) throws IOException { /* //根据数据源创建字符输入流对象 BufferedReader br = new BufferedReader(new FileReader("myOtherStream\\PrintStreamDemo.java")); //根据目的地创建字符输出流对象 BufferedWriter bw = new BufferedWriter(new FileWriter("myOtherStream\\Copy.java")); //读写数据,复制文件 String line; while ((line=br.readLine())!=null) { bw.write(line); bw.newLine(); bw.flush(); } //释放资源 bw.close(); br.close(); */ //根据数据源创建字符输入流对象 BufferedReader br = new BufferedReader(new FileReader("myOtherStream\\PrintStreamDemo.java")); //根据目的地创建字符输出流对象 PrintWriter pw = new PrintWriter(new FileWriter("myOtherStream\\Copy.java"), true); //读写数据,复制文件 String line; while ((line = br.readLine()) != null) { pw.println(line); } //释放资源 pw.close(); br.close(); } }