I/O流

I/O流

"i"  就是指input,输入的意思。

"o" 就是指output,输出的意思。

 

在内存的角度定义:

输入:从硬盘到内存。

输出:从内存到硬盘。

 

传输的介质分为两种,一种是字节流,一种是字符流。

字节流(Byte),顾名思义,每传输一次就只是传输一个字节。

字节流有一个缺点。

字符:1个英文=1个byte      1个中文=2个byte,

那么一个中文用字节传输就会将其强行拆开,那么就会出现乱码,

虽然到TXT格式的文本里面有会重新组合出来,但总也不太好的。

文件字节输入输出:FileInputStream、FileOutputStream

文件的复制粘贴:

			//构建文件输入流对象
			FileInputStream fis = new FileInputStream(srcFileName);
			//构建文件输出流对象
			FileOutputStream fos = new FileOutputStream(destFileName);
			//读取文件
			int data = fis.read();
			while(data!=-1){
				//写入到输出流中
				fos.write(data);
				data = fis.read();//递归继续读取
			}
			System.out.println("文件复制粘贴成功!。。。。");
			//关闭流
			fis.close();
			fos.close();//构建文件输入流对象
			FileInputStream fis = new FileInputStream(srcFileName);
			//构建文件输出流对象
			FileOutputStream fos = new FileOutputStream(destFileName);
			//读取文件
			int data = fis.read();
			while(data!=-1){
				//写入到输出流中
				fos.write(data);
				data = fis.read();//递归继续读取
			}
			System.out.println("文件复制粘贴成功!。。。。");
			//关闭流
			fis.close();
			fos.close();

 

字符流(Cher),

字符流就没有字节流的缺点。

每一个英文字母和中文子都为一个字符,那么传输的时候就不会出现乱码。

虽然两者有差异,但在实际使用的时候也要选择适合的来使用。

还有要记得在使用完流以后记得关掉流(close)。

 

在使用流的时候还有节点流和处理流,处理流又叫包装流。

IO流,相当于在两个文件中间插上一条水管。

处理流就是说把水管包装的大些,让水流跟大。

两个水管的接口就是节点流,而中间的管子就是处理流。

输入:

节点流:

		// 创建一个字节文件输入流
		FileInputStream fis = new FileInputStream("sdn");

输入的处理流(包装流):

		// 包装:将字节的文件输入流包装成字符流
		InputStreamReader isr = new InputStreamReader(fis);
		// 包装:将字符流包装成缓冲流
		BufferedReader br = new BufferedReader(isr);

输出:

		// 输出流包装
		FileOutputStream fos = new FileOutputStream("ssddnn");

输出的处理流(包装流):

		OutputStreamWriter osw = new OutputStreamWriter(fos);
		BufferedWriter bw = new BufferedWriter(osw);OutputStreamWriter osw = new OutputStreamWriter(fos);
		BufferedWriter bw = new BufferedWriter(osw);

循环输入输出,实现复制粘贴。


		String line = br.readLine();
		while (line != null) {
			// System.out.println(line);

			bw.write(line);
			bw.newLine();
			line = br.readLine();
		}

关闭输出、输入流:

		br.close();
		isr.close();
		fis.close();

		bw.close();
		osw.close();
		fos.close();

创建一个字节流数组来保存一次读取的字节,然后一次性写出。

		//创建一个字节流//创建一个字节流
		InputStream ins = new FileInputStream("test.txt");
InputStream ins = new FileInputStream("test.txt");
		// 创建字节数组
		byte[] bytes = new byte[512];
		int v = ins.read(bytes);
		while (v != -1) {
			// 把数组内容转化为字符串
			String str = new String(bytes, 0, v);
			System.out.println(str);
			v = ins.read(bytes);
		}

用数组的也有缺点。

创建一个长度为512的数组,那么如果一个中文字是由第512个字节个第513个字节组合起来的,那么程序也会强行拆开,出现乱码。

那么就可以用到字符数组

		FileWriter fw = new FileWriter("test11.txt");
		String str = "中华人民共和国";
		// 把字符串转化为字符数组
		char[] chars = str.toCharArray();
		fw.write(chars);
		fw.flush();
		fw.close();FileWriter fw = new FileWriter("test11.txt");
		String str = "中华人民共和国";
		// 把字符串转化为字符数组
		char[] chars = str.toCharArray();
		fw.write(chars);
		fw.flush();
		fw.close();

		br.close();
		isr.close();
		fis.close();

		bw.close();
		osw.close();
		fos.close();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值