1 A.java
* 标准输入输出流:
* public static final InputStream in:标准输入流
public static final PrintStream out:标准输出流*
* 标准输入输出流和之前学的字符流和自己流不一样了,之前学的是可以读取文本文件、图片、音频等内容
*
* 标准输入流用来读取键盘录入数据的,标准输出流用来把数据写到控制台上
*
标准输入流
public static final InputStream in:字节输入流,用来读取键盘录入的数据
System.in;标准输入流
标准输出流:
printStream:是outputSteam的子类,所以这是一个字节输出流
public static final PrintStream out:字节输出流,将数据输出到命令行
System.out;标准输出流
*/2 B.java
* 需求:读取项目根目录下的B.java,并输出到命令行(读你的文件(字符),输出到控制台(字节))
*
* 数据源:项目根目录下的B.java 字符输入流BufferedReader
*
* 目的地:打印到命令行 ,我们就要用标准的输出流System.out
*
*
由于标准输出流是一个字节输出流,所以只能输出字节或者字节数组,但是我们读取到的数据则是字符串,如果想进行输出还需要转换成字节数组
{//创建输出流对象
OutputStream os = System.out;//打印到控制台,命令行(地址)[字节流]os.write(line.getBytes());//将字符转成字节数组,然后write(字节数组),注意这个方法通过字节可以输出看得懂的字符,也就是可以输出所需内容即可
}
* 我们要想通过标准输出流输出字符串,把标准输出流转换成一种字符输出流即可,OutputStreamWriter
*
* OutputStreamWriter(OutputStream out) :转换流,把字节输出流转换成字符输出流
*两种形式:
①Writer w = new OutputStreamWriter(System.out);//①使用字符流来接输出到控制台
②BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));//②直接使用缓冲字符流来输出到控制台
public class B { public static void main(String[] args) throws IOException { // method();//读取的是字符,将字符转成字节, method2(); // method3(); } private static void method3() throws FileNotFoundException, IOException { //创建输入流对象 BufferedReader br = new BufferedReader(new FileReader("SystemInOutDemo.java")); //创建输出流对象 //OutputStream os = System.out; //Writer w = new OutputStreamWriter(System.out);//多态,父类型引用指向子类对象 //BufferedWriter bw = new BufferedWriter(w); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));//②直接使用缓冲字符流来输出到控制台,记住跟method2的区别 //进行数据的读写 String line;//用于存储读取到的数据 while((line = br.readLine()) != null) { bw.write(line); bw.newLine();//跟method2换行的区别 } //释放资源 bw.close(); br.close(); } //读取的是字符,输出的还是字符,比较重点! private static void method2() throws FileNotFoundException, IOException { //创建输入流对象 BufferedReader br = new BufferedReader(new FileReader("SystemInOutDemo.java")); //创建输出流对象 //OutputStream os = System.out; Writer w = new OutputStreamWriter(System.out);//①使用字符流来接输出到控制台,多态,父类型引用指向子类对象 //进行数据的读写 String line;//用于存储读取到的数据 while((line = br.readLine()) != null) { w.write(line); w.write("\r\n"); } //释放资源 w.close(); br.close(); } //读取的是字符,将字符转成字节, private static void method() throws FileNotFoundException, IOException { //创建输入流对象 BufferedReader br = new BufferedReader(new FileReader("B.java")); //创建输出流对象 OutputStream os = System.out;//打印到控制台,命令行(地址)[字节流] String line;//用于存储读取到的数据 while((line = br.readLine()) != null) { os.write(line.getBytes()); os.write("\r\n".getBytes()); } //释放资源 os.close(); br.close(); } }
3 C.java
/*
需求:读取键盘录入的数据,并输出到项目根目录下的a.txt文件中(读你的控制台(字节),输出到文件(字符))
*
* 数据源:读取键盘录入的数据 System.in
* 目的地:项目根目录下的a.txt FileWriter
*
* 转换流:需要把字节输入流转换成字符输入流,InputStreamReader
* InputStreamReader(InputStream in)
*下面有两个方法:读取字符(method2)和读取字节(method),然后根据类型调用不同的输出方法(write参数不同)
public class C { public static void main(String[] args) throws IOException { method2();//一次读写一个字符数组,比较常用~ } private static void method2() throws IOException { //创建输入流对象 InputStream is = System.in;//在控制台输入(这是字节流) Reader r = new InputStreamReader(is);//这是字符流 //创建输出流对象 FileWriter fw = new FileWriter("e.txt");//字符输出流 //读写数据 char[] chs = new char[1024]; int len; while((len = r.read(chs)) != -1) { fw.write(chs,0,len); fw.flush(); } //释放资源 fw.close(); is.close(); } private static void method() throws IOException { //创建输入流对象 InputStream is = System.in; //创建输出流对象 FileWriter fw = new FileWriter("a.txt"); //读写数据,一次读取一个字节数组 byte[] bys = new byte[1024]; int len;//用于存储读取到的字节个数 while((len = is.read(bys)) != -1) { fw.write(new String(bys,0,len)); fw.flush(); } //释放资源 fw.close(); is.close(); } }
4 D.java
* 打印流:
* 在整个IO包中打印输出流信息最方便的类
*
* 打印流:
* 只能输出,不能输入,没有对应的输入流
*
* pintStream【字节打印流】
* printWriter[字符打印流]
*
* PrintStream
* PrintWriter
*
* 可以自动换行,println()
*
* 不能输出字节,但是可以输出其他任意类型
*
* 通过某些配置,可以实现自动刷新(只有在调用 println、printf 或 format才有用)
*
* 也是包装流,不具备写出功能
*
* 可以把字节输出流转换成字符输出流
*
* 注意:只能输出不能输入
*public class D { public static void main(String[] args) throws IOException { //创建打印流对象 PrintWriter pw = new PrintWriter("e.txt"); //写出数据 pw.write("hello"); pw.write("world"); pw.write("java"); //释放资源 pw.close(); } }
5 E.java
* 打印流的特有功能:
* 自动换行 使用方法println()实现自动换行
* 自动刷新 创建PrintWriter对象时启动自动刷新开关,并且使用println等3个方法可以实现自动刷新( println、printf 或 format 方法将刷新输出缓冲区)*
* 注意:创建FileWriter对象时boolean参数是是否追加,
* 而创建打印流对象的boolean类型参数是是否自动刷新public class E { public static void main(String[] args) throws IOException { // method(); method3(); } private static void method3() throws IOException { //创建打印流对象 //PrintWriter pw = new PrintWriter("d.txt"); PrintWriter pw = new PrintWriter(new FileWriter("be.txt"),true);//开启自动刷新功能 pw.println("hello"); pw.println("world"); pw.println("java"); //释放资源 //pw.close(); } private static void method() throws FileNotFoundException { //创建打印流对象 PrintWriter pw = new PrintWriter("e.txt"); /*pw.write("hello"); pw.write("world"); pw.write("java");*/ pw.print("hello");//不换行 pw.println("world");//换行 pw.println("java"); //释放资源 pw.close(); } }
小结:
1.缓冲流与标准输入输出流
BufferedReader br = new BufferedReader(new FileReader("A.java"));//读文件
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));//读控制台2.BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));//写到控制台 BufferedWriter bw = new BufferedWriter(new FileWriter("2.txt")); //写到文件
以上是最常用的标准输入输出流与buffer缓冲字符流的转换代码
-------------------------------------------------------------------------------------------------------------------------
1.转换流与标准输入输出流
Writer w = new OutputStreamWriter(System.out);//写到控制台(是通过bufferreader结合使用) Reader r = new InputStreamReader(System.in); //读控制台(然后与fileWriter结合使用)-------------------------------------------------------------------------------------------------------------------------
1.标准输入输出流自己单干
InputStream is = System.in; //读控制台OutputStream os = System.out;//写控制台
-------------------------------------------------------------------------------------------------------------------------
即:
总结(三种方式):①:缓冲流(操作文件)与标准输入输出流(操作控制台)进行完成。②缓冲流(操作文件)与转换流(操作控制台)进行完成。③缓冲流直接完成。
JavaSE_day41(标准输入输出流介绍(字节),读取目录下的文件,并输出到命令行;读取键盘录入的数据,并输出到目录下的文件中,打印流使用,如何通过打印流往文件写内容)
于 2023-05-30 13:06:22 首次发布