JAVA学习心得——几种典型的IO流

IO流:I是指Input(输入),O是指Output(输出)。所以几种接来几种典型的IO流都是通过Input 输入 和 Output输出来进行操作的。

一、字节流:字节流用于处理字节为单位二进制文件(如音乐、图片等),

现在有这么A、B两个瓶子, 想把A瓶的水通过java复制机,复制一份,放在B瓶中。

第一步插入一个导管到A瓶中:

FileInputStream fileinputstream = new FileInputStream("C:\\aaa\\bbb\\111.jpg")

第二步:将导管插入B瓶中。

FileOutputStream fileOutputStream = new FileOutputStream("C:\\aaa\\bbb\\222.jpg");

第三步开始复制转移:

int date =0;

while((fileInputStream.read())!=-1) { 

      fileOutputStream.write(date);

 }

 

其实IO就是这么一个过程,

具体代码如下:

		try {
			FileInputStream fileInputStream = new FileInputStream("C:\\aaa\\bbb\\111.jpg");
			FileOutputStream fileOutputStream = new FileOutputStream("C:\\aaa\\bbb\\222.jpg");
			int date =0;
			try {
				while((fileInputStream.read())!=-1) {
					fileOutputStream.write(date);
				}
				fileOutputStream.flush();
		} catch (Exception e) {
			e.printStackTrace();
		}

还可以使用数组的方式,进行传输,此过程我们进行资源释放:

FileInputStream fileInputStream =null;
		FileOutputStream fileOutputStream = null;
		try {
			fileInputStream = new FileInputStream("C:\\aaa\\bbb\\111.jpg");
			fileOutputStream = new FileOutputStream("C:\\aaa\\bbb\\111.jpg");
			byte [] car = new byte[1024];
			int length = 0;
				while((length=fileInputStream.read(car))!=-1) {
					fileOutputStream.write(car,0,length);
				}
				fileOutputStream.flush();
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			if(fileInputStream!=null) {
				try {
					fileInputStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		if(fileOutputStream!=null) {
			try {
				fileOutputStream.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

二、字符流:字符流用于处理以Unicode字符为单位的文本文件(如记事本文件等)。

和上述过程是一样的:也是先进行两步建立连接,然后再进行复制传输。同样是有两种形式。接下来我们分别演示,

第一种:非数组形式

		try {
			FileReader fileReader = new FileReader("C:\\aaa\\bbb\\111.jpg");
			FileWriter fileWriter = new FileWriter("C:\\aaa\\bbb\\222.jpg");
			int data =0;
			while((data =fileReader.read())!=-1) {
			fileWriter.write(data);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

第二种:数组形式传输:

		try {
			FileReader fileReader = new FileReader("C:\\aaa\\bbb\\111.jpg");
			FileWriter fileWriter = new FileWriter("C:\\aaa\\bbb\\222.jpg");
			char [] car = new char [1024];
			int length =0;
			while(( length=fileReader.read(car))!=-1) {
			fileWriter.write(car,0,length);
			}
			fileWriter.flush();
		} catch (Exception e) {
			e.printStackTrace();
		}

三、缓冲流:缓冲流是一种装饰器类,目的是让原字节流、字符流新增缓冲的功能以提高读取或写入。

不仅可以修饰字节流,也可以修饰字符流,相当于在复制传输的中间加上一个中转站;

修饰字节具体代码演示如下:

		try {
			BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream("C:\\aaa\\bbb\\111.jpg"));
			BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream("C:\\aaa\\bbb\\222.jpg"));
			int date =0;
			try {
				while((bufferedInputStream.read())!=-1) {
					bufferedOutputStream.write(date);
				}
				bufferedOutputStream.flush();
		} catch (Exception e) {
			e.printStackTrace();
		}

修饰字符具体代码演示:

		try {
			BufferedReader bufferedReader = new BufferedReader(new FileReader("C:\\aaa\\bbb\\111.jpg"));
			BufferedWriter bufferedWriter =new BufferedWriter(new FileWriter("C:\\aaa\\bbb\\111.jpg"));
			char [] car = new char [1024];
			int length =0;
			while(( length=bufferedReader.read(car))!=-1) {
				bufferedWriter.write(car,0,length);
			}
			bufferedWriter.flush();
		} catch (Exception e) {
			e.printStackTrace();
		}

 

四、转换流:由于文件自身编码方式和程序运行时使用的默认编码方式不一致,致使程序读取或输出字符文件时可能会出现乱码,这时可以使用字节流操作文件,然后再将字节流转换成字符,这一转换过程可以借助转换流实现。

具体代码如下:

		try {
			InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream("C:\\aaa\\bbb\\111.txt"),"UTF-8");
			OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream("C:\\aaa\\bbb\\111.txt"),"UTF-8");
			char [] car = new char [1024];
			int length =0;
			while(( length=inputStreamReader.read(car))!=-1) {
				outputStreamWriter.write(car,0,length);
			}
			outputStreamWriter.flush();
		} catch (Exception e) {
			e.printStackTrace();
		}

 

五、数据流(了解):通过DataInputStreamDataOutputStream数据流可以直接操作基本数据类型字符串。

		int age = 21 ;
		double price = 9.9;
		try {
			DataOutputStream dataOutputStream = new DataOutputStream(new FileOutputStream("C:\\aaa\\bbb\\111.temp"));
			dataOutputStream.writeInt(age);;
			dataOutputStream.writeDouble(price);;
			dataOutputStream.flush();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		try {
			DataInputStream dataInputStream = new DataInputStream(new FileInputStream("C:\\aaa\\bbb\\111.temp"));
			int a =dataInputStream.readInt();
			double b =dataInputStream.readDouble();
			System.out.println(a);
			System.out.println(b);
		} catch (Exception e) {
			e.printStackTrace();
		}

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值