IO处理流简单应用

一:转换流

InputStreamReader:将字节输入流转换为字符输入流,构造方法参数为InputStream子类。

InputStreamReader isr = new InputStreamReader new FileInputStream(文件路径))

OutputStreamWriter:  将字节输出流转换为字符输出流,构造方法参数为OutputStream子类。

OutputStreamWriter osw = new OutputStreamWriternew FileOutputStream(文件路径))

应用举例:将对文件的字节输入输出流转换为对文件的字符输入输出流。

	<span style="font-weight: normal;">public static void main(String[] args) {
		OutputStreamWriter isw = null;
		InputStreamReader isd = null;
		try {
			char[] a = { 'A', 'B' };
			// 创建从程序输出到文件的字节输出流,并转换为字符输出流
			isw = new OutputStreamWriter(new FileOutputStream("E://Text.txt"));
			isw.write(a);// 将字符数组写入文件

		} catch (IOException e) {// 异常捕获
			e.printStackTrace();
		} finally {
			try {
				if (isw != null)
					isw.close();// 关闭字符输出流
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		try {
			// 创建从文件读取数据的字节输入流,并转换为字符输入流
			isd = new InputStreamReader(new FileInputStream("E://Text.txt"));

			char[] b = new char[2];
			isd.read(b);// 从文件读取字符数组
			for (char c : b) {
				System.out.println(c);
			}
		} catch (IOException e) {// 异常捕获
			e.printStackTrace();
		} finally {
			try {
				if (isd != null)
					isd.close();// 关闭字符输入流
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

}</span>

二:缓冲流

缓冲流要套接在相应的节点流之上,提高了读写的效率。此处理流的构造方法都得传相对应的基类类型

BufferedReader:提供了readLine方法用于高效读取一行字符串

BufferedWriter:提供了newLine用于用于高效写入一行字符串(一个行分隔符也就是换行)

BufferedInputStream 没多大用处

BufferedOutputStream 没多大用处

应用举例:用缓冲流构建Scanner类似的从键盘输入数据的方法

	/**
	 * 从键盘一行读取数据,并以字符串的形式返回。
	 * @return
	 */
	public static String getDataByKeyboard() {
		try {
			//创建BufferedReader缓冲流,缓冲流传递的参数为Reader的子类实例。
			BufferedReader bis = new BufferedReader(new InputStreamReader(
					System.in));
			//bis.close();不需要关闭。因为System.in是系统建立及关闭
			return bis.readLine();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}

三:数据流

数据流主要为实现可以存取Java基本数据类型如long,boolean等。

(注意:因为数据流是字节流,所以

DataInputStream需要和InputStream子类套接

DataOutputStream需要和OutputStream套接)

应用举例:用数据流存取Java基本数据类型

	public static  void DataText() throws IOException{
		//构建字节数组输出流
		ByteArrayOutputStream bos=new ByteArrayOutputStream();
		//构建数据输出流
		DataOutputStream dos=new DataOutputStream(bos);
		dos.write(1);
		dos.writeBoolean(true);
		dos.writeUTF("你好");//字符串形式输入
		
		//获取字节数组
		byte []a=bos.toByteArray();
		//构建字节数组输入流
		ByteArrayInputStream bis=new ByteArrayInputStream(a);
		//构建数据输入流
		DataInputStream dis=new DataInputStream(bis);
		//注意读取顺序必须和写入顺序一致。
		int num=dis.read();
		boolean b=dis.readBoolean();
		String s=dis.readUTF();
		System.out.println("num :"+num);
		System.out.println("b :"+b);
		System.out.println("s :"+s);	
	}

四:对象流

等同于c#序列化,用直接将Object写入或读出

(注意:
1:对象流是字节流。
2:对象流操作的对象必须是可序列化的。
在Java中需要序列化的类必须实现Serializable接口
transient关键字为不序列化此成员变量
应用举例:用对象流存取学生对象到文件

	public static void ObjectInputText() {
		//创建学生对象
		Student student = new Student("小明", 25, true);
		Student s = null;
		ObjectOutput oos = null;
		ObjectInputStream ois = null;
		try {
			//创建对象输出流
			oos = new ObjectOutputStream(new FileOutputStream("E://Text.txt"));
			oos.writeObject(student);//将对象写入文件
			//创建对象输入流
			ois = new ObjectInputStream(new FileInputStream("E://Text.txt"));
			s = (Student) ois.readObject();//从文件读取对象,并将值赋给s
			System.out.println(s);
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} finally {
			try {
				if (oos != null)
					oos.close();//关闭对象输出流
				if (ois != null)
					ois.close();//关闭对象输入流
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值