黑马程序员_javaIO流笔记

------- android培训java培训、期待与您交流! ----------

java中的io流分为字符流和字节流。字符流是操作文本数据的,字节流操作任意数据。

字符流

读Reader

以FileReader为例
1. read()方法读
	public static void readFile1(){
		//声明FileReader变量
		FileReader fr = null;
		try{
			//建立FileReader对象,用于读取helloworld.txt文件内容
			fr = new FileReader("helloworld.txt");
			//单个字符循环获取数据并打印
			int ch;
			while((ch = fr.read()) != -1){
				System.out.print((char)ch);
			}
		}catch(IOException e){
			e.printStackTrace();
		}finally{
			try{
				//关闭流资源
				if(fr != null)
					fr.close();
			}catch(IOException e){
				e.printStackTrace();
			}
		}
	}

2.read(char[])方法读
	public static void readFile2(){
		//声明FileReader变量
		FileReader fr = null;
		try{
			//建立FileReader对象,用于读取helloworld.txt文件内容
			fr = new FileReader("helloworld.txt");
			//用数组批量获取字符并打印
			char[] ch = new char[1024];
			int num;
			while((num = fr.read(ch)) != -1){
				System.out.print(new String(ch,0,num));
			}
		}catch(IOException e){
			e.printStackTrace();
		}finally{
			try{
				//关闭流资源
				if(fr != null)
					fr.close();
			}catch(IOException e){
				e.printStackTrace();
			}
		}
	}

3. 用BufferedReader装饰类来读
	public static void readFile3(){
		//声明缓冲区流变量
		BufferedReader bufr = null;
		try{
			//建立缓冲区流对象,传入参数为普通流对象
			bufr = new BufferedReader(new FileReader("helloworld.txt"));
			//用readLine方式获取数据
			String line = null;
			while((line = bufr.readLine()) != null){
				System.out.println(line);
			}
		}catch(IOException e){
			e.printStackTrace();
		}finally{
			try{
				//关闭流资源
				if(bufr != null)
					bufr.close();
			}catch(IOException e){
				e.printStackTrace();
			}
		}
	}

写Writer

以FileWriter为例

1. 普通写

	public static void writeFile(){
		//声明流变量
		FileWriter fw = null;
		try{
			//创建流对象,写入目的地为helloworld.txt
			fw = new FileWriter("helloworld.txt");
			//写入字符串
			fw.write("helloworld");
		}catch(IOException e){
			e.printStackTrace();
		}finally{
			try{
				//关闭流资源
				if(fw != null){
					fw.close();
				}
			}catch(IOException e){
				e.printStackTrace();
			}
		}
	}


2.续写

fw = new FileWriter("helloworld.txt",true);

3.用BufferedWriter写

	public static void writeFile2(){
		//声明流变量
		BufferedWriter bufw = null;
		try{
			//创建流对象,写入目的地为helloworld.txt
			bufw = new BufferedWriter(new FileWriter("helloworld.txt"));
			//写入字符串
			bufw.write("helloworld");
			//newLine可以跨平台换行
			bufw.newLine();
			//刷新写入文件
			bufw.flush();
			bufw.write("a new line");
		}catch(IOException e){
			e.printStackTrace();
		}finally{
			try{
				//关闭流资源
				if(bufw != null){
					bufw.close();
				}
			}catch(IOException e){
				e.printStackTrace();
			}
		}
	}

字节流

读InputStream

与字符流的过程基本相似,只是把FileReader换成FileInputStream,BufferedReader换成BuffedInputStream,char数组换成byte数组就行了。

写OutputStream

与字符流的过程基本相似,只是把FileWriter换成FileOutputStream,BufferedWriter换成BufferedOutputStream
再用BufferedOutputStream时,不需要flush

流转换

字节流转换为字符流

InputStreamReader
我们在键盘录入时,要用System.in,这是一个字节流对象。但我们键盘输入的是文本信息,我们就需要将其转化为字符流进行读取,这样读取更方便。
下面的例子为从控制台获取键盘输入,并将其变成大写输出。
	public static void changeStream(){
		//声明缓冲字符流变量
		BufferedReader bufr = null;
		String line = null;
		try{
			//转换流,获取键盘输入
			bufr = new BufferedReader(new InputStreamReader(System.in));
			//单行获取,如果为over结束循环
			while(!(line = bufr.readLine()).equals("over")){
				//将获取到的字符串变为大写
				System.out.println(line.toUpperCase());
			}
		}catch(IOException e){
			e.printStackTrace();
		}finally{
			try{
				//关闭流
				if(bufr != null)
					bufr.close();
			}catch(IOException e){
				e.printStackTrace();
			}
		}
	}
OutputStreamWriter
用到的类是OutputStreamWriter,用法与InputStreamReader类似。
它可以把字节流转换为字符流并查相应的码表。
------- Windows Phone 7手机开发.Net培训、期待与您交流! -------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值