您当前的位置: 首页 >  Java

暂无认证

  • 3浏览

    0关注

    97560博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Java基础---Java---IO流-----读取键盘录入、InputStreamReader、转换流、OutputStreamWriter、InputStreamReader

发布时间:2014-03-28 11:22:53 ,浏览量:3

字符流:

FileReader FileWriter BufferedReader BufferedWriter 字节流: FileInputStream FileOutputStream BufferedInputStream BufferedOutputSteam 读取键盘录入 System.out:对应的是标准输出设备,控制台 System.in:对应的是输入设备 通过键盘录入数据,当录入一行数据后,就将行数据进行打印。如果录入的数据是over,那么停止录入。 通过刚才的键盘录入一行数据并打印其大写,发现就是读一行数据的原理。也就是readLine方法, readLine方法是字符流BufferedReader类中的方法 而键盘录入的read方法是字节流InputStream中的方法。 InputStreamReader是专门用于操作字节流的字符流对象。字节流通向节符流的桥梁,它使用指定的charset读取字节并将其解码为字符,它使用的字符集可以由名称指定位置或显示给定。每次调用InputStreamReader中的一个read方法都会导致从底层输入流读取一个或多个字节。要启用字节到字符的有效转换,可以提前从底层流中读取更多的字节。使其超过当前读取操作所须的字节。
import java.io.*;
class  ReadIn{
	public static void main(String[] args)throws IOException{
		InputStream in=System.in;
		//读取一个
		//int by=in.read();
		//System.out.println(by);
		//System.out.println('\n'+0);//读取\n的int值
		StringBuilder sb=new StringBuilder();
		while(true){
			int ch=in.read();
			if(ch=='\r')
			continue;
			if(ch=='\n')
			{
				String s=sb.toString();
				if("over".equals(s))
				break;
				System.out.println(s.toUpperCase());//变成大写打印
				sb.delete(0,sb.length());
			}
			sb.append((char)ch);
		}
		
	}


}
import java.io.*;
class TransStreamDemo{
	public static void main(String[] args){
		//获取键盘的录入对象
		InputStream in=System.in;
		//将字节流对象转化成字符流对象,使用转换流,InputStreamReader
		InputStreamReader isr=new InputStreamReader(in);
		//为了提高效率,将字符串进得缓冲区技术高效操作,使用BufferedReader
		BufferedReader bufr=new BufferedReader(isr);
		//也可以把上面的3句话写成一句话,这是键盘录入的最常见写法
		//BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
		
		
		OutPutStream out=System.out;
		OutputStreamWriter osw=new OutputStreamWriter(out);
		//转换流
		BufferedReader bufr=new BufferedReader(isr);
		//也可以把上面的3句话写成一句话,这是键盘录入
		//BufferedWriter bufw=new BufferedReader(new OutputStreamWriter(System.out));
		
		String line=null;
		while((Line=bufr.readLine())!=null){
			if("over".equals(line))
			break;
			//System.out.println(line.toUpperCase());
			//sb.delete(0,sb.length());
			//osw.write(line.toUpperCase()+"
			//\r\n//");//这里要通过+”\r\n结束
			//osw.flush();
			//调用转换流
			bufw.write(line.toUpperCase());
			bufw.newLine();
			bufw.flush();
		}
		bufr.close();
	}
}
OutputStreamWriter它是一个字符流通向字节的桥梁,可使用指定的charset将要写入流中字符编码成字节。 1.源:键盘录入。 目的:控制台。 2.需求:想把键盘录入的数据存储到一个指定的文件中。 源:键盘。 目的:文件。 3.需求:想到把一个文件的内容打印到控制台上。 源:键盘。 目的:控制台。 流操作的基本规律: 最痛苦的是流对象有很多,不知道应该用哪 一个,通过两个明确来完成。 1.通过两个明确来完成。 源:输入流。InputStream Reader 目的:输出流。OutPutStream Writer. 2.操作的数据流是否是纯文本。 是:字符流。 不是:字节流。 3.当体系明确后,在明确要使用哪个具体对象。通过设备来进行区分。 源设备:内存,硬盘,键盘。 目的设备:内存,硬盘,控制台。 1.将一个文体文件中数据存储到另一个文件中,复制文件。 源:因为是源,所以使用读数据。InputStream Reader ---是不是操作文本文件。 是!这时就可以选择Reader 这样体系就明确了。 ---接下来明确该体系中属于哪一个对象。 明确设备:硬盘,上一个文件。 Reader体系中可以操作文件的对象是FileReader ---是否需要提高效率:是!加入Reader体系中缓冲区 BufferedReader. FileReader fr=new FileReader("a.txt"); BufferedReader bufr=new BufferedReader(fr); 目的:OutputStream Writer 是否为纯文本。 是!Writer. 设备:键盘,一个文件。 Writer体系中可以操作文件的对象FileWriter 是否需要提高效率:是!加入Reader体系中缓冲区 BufferedWriter. FileWriter fw=new FileWriter("b.txt"); BufferedWriter bufw=new BufferedWriter(fw); 2.需求:将键盘录入的数据保存到一个文件中,这个需求中有源和目的存在。 那么分别分析 源:InputStream Reader 是不是纯文本?是!Reader 设备:键盘。对应的对象是System.in 不是选择Reader吗?System.in对应的不是字节流吗? 为了操作键盘的文本数据方便,转成字符操作是最方便的。 所以既然明确了Reader,那么就将System.in转换成字符流。用了Reader体系中转换流,InputStreamReader isr=new InputStreamReader(System.in); 需要提高效率么?需要!BufferedReader BufferedReader bufr=new BufferedReader(isr); 目的:OutputStream Writer 是否存在文本?是!Writer 设备:硬盘。一个文件,使用FileWriter. FileWriter fw=new FileWriter("c.txt"); 需要提高效率么?需要 BufferedWriter bufw=new BufferedWriter(fw);
import java.io.*;
class TransStreamDemo{
	public static void main(String[] args)throws IOException{
		
		
		//这是键盘录入的最常见写法
		//需求3,把1.java中的数据读到控制台上
		BufferedReader bufr=new BufferedReader(new InputStreamReader(new FileInputStram("1.java")));
		
		
		BufferedWriter bufw=new BufferedReader(new OutputStreamWriter(System.out));
		//需求2
		BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in);
		
		//把输入的文字写到2.txt中
		BufferedWriter bufw=new BufferedReader(new OutputStreamWriter(new FileOutStream("2.txt"));
		
		String line=null;
		while((Line=bufr.readLine())!=null){
			if("over".equals(line))
			break;
			bufw.write(line.toUpperCase());
			bufw.newLine();
			bufw.flush();
		}
		bufr.close();
	}
}
-------------------------------- 扩展:想要把录入的数据按指定的编码表,将数据指定到文件中。转换流的由来,就是因为它里面可以使用编码表。 目的:OutputStream Writer 是否存在文本?是!Writer 设备:硬盘。一个文件,使用FileWriter. 但是FileWriter是使用的默认编码,GBK 但是在存储时,需要加入指定的编码表UTF-8,而指定的编码表只有转换流可以指定。 所以要使用的对象是OutputStreamWriter. 而转换流对象要接收一个字节输出流。而且还可以操作的文件的字节输出流。FileOutputStream OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("d.txt")."UTF-8"); 需要高效么? 需要 BufferedWriter bufw=new BufferedWriter(osw); 特别提醒一下:转换流什么时候使用,字符和字节之间的桥梁,通常,涉及到字符编码转换时。需要用到转换流 代码如下:
import java.io.*;
class TransStreamDemo2{
	public static void main(String[] args)throws IOException{
		
		
		//这是键盘录入的最常见写法
		
		BufferedReader bufr=new BufferedReader(new InputStreamReader(new InputStramReader(System.in)));
		
		BufferedWriter bufw=new BufferedReader(new OutputStreamWriter(new FileOutputStream("d.txt"),"UTF-8");
		//如上面的文件是uft-8文件,用FFileReader不能能其读取,因为FileReader默认只读取GBK编码。所以这个时候要用InputStreamReader(转换流)来读取。InputStreamReader("d.txt","utf-8")指定编码表
		


		
		String line=null;
		while((Line=bufr.readLine())!=null){
			if("over".equals(line))
			break;
			bufw.write(line.toUpperCase());
			bufw.newLine();
			bufw.flush();
		}
		bufr.close();
	}
}
关注
打赏
1655516835
查看更多评论
立即登录/注册

微信扫码登录

1.1161s