JavaSE_day41(标准输入输出流介绍(字节),读取目录下的文件,并输出到命令行;读取键盘录入的数据,并输出到目录下的文件中,打印流使用,如何通过打印流往文件写内容)

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;//写控制台

-------------------------------------------------------------------------------------------------------------------------

即:

总结(三种方式):①:缓冲流(操作文件)与标准输入输出流(操作控制台)进行完成。②缓冲流(操作文件)与转换流(操作控制台)进行完成。③缓冲流直接完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值