JAVA基础之IO流

  IO流的分类:
  		流向:
  			输入流	读取数据
  			输出流 	写出数据
  		数据类型:
  			字节流
 				字节输入流	读取数据	InputStream
  									int read() 一次读取一个字节
  									int read(byte[] bys)  一次读取一个字符数组
  									FileInputStream()   读取指定文件
  									BufferedInputStream 字节缓冲输入流
  				字节输出流	写出数据	OutputStream
  									void write(int by)  一次写一个字节
  									void write(byte[] bys,int i,int len)  一次写入字节数组的一部分
  									FileOutputStream()	   写入指定文件
  									BufferedOutputStream  字符缓冲输出流
  			转换流
  				字节转化成字符		InputStreamReader(InputStream is)   输入流(字节转为字符)
  								OutputStreamWrite(OutputStream os)  输出流(字节转为字符)
  			字符流 (字符流=字节流+编码表)
  				字符输入流	读取数据	Reader
  									int read() 一次读取一个字符
  									int read(char[] chs) 一次读取一个字符数组
  									InputStreamReader()   读取指定文件
  										FileRreader		(第二种)
  									BufferedReader		字符缓冲输入流
  										String readLine()  一次读取一行数据
  				字符输出流	写出数据	Writer
  								void write(int ch) 一次写一个字符
  								void write(char[] chs,int i,int len)  一次写一个字符数组的一部分
  								OutputStreamWriter()  写入指定文件
  									根据指定编码把字节流数据转换为字符流
  									OutputStreamWriter(OutputStream out,String charsetName)
  									FileWriter  (第二种)
  								BufferedWriter    字符缓冲输出流
  									void newLine()  写换行符号(根据系统来决定换行符)
  									void write(String s) 写一个字符串
  									包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null
  注意:一般我们在探讨IO流的时候,如果没有明确说明按哪种分类来说,默认情况下是按照数据类型来分的。
/*
 * 字节输入流操作步骤:
 * A:创建字节输入流对象
 * B:调用read()方法读取数据,并把数据显示在控制台
 * C:释放资源
 * 
 * 读取数据的方式:
 * A:int read():一次读取一个字节
 * B:int read(byte[] b):一次读取一个字节数组
 */
public class FileInputStreamDemo {
	public static void main(String[] args) throws IOException {
		// FileInputStream(String name)
		// FileInputStream fis = new FileInputStream("fis.txt");
		FileInputStream fis = new FileInputStream("FileOutputStreamDemo.java");
		// 读取数据
		int by = 0;
		// 读取,赋值,判断
		while ((by = fis.read()) != -1) {
			System.out.print((char) by);
		}
		// 释放资源
		fis.close();
	}
}
/*
 * 字节输出流操作步骤:
 * A:创建字节输出流对象
 * B:调用write()方法
 * C:释放资源
 * 
 * public void write(int b):写一个字节
 * public void write(byte[] b):写一个字节数组
 * public void write(byte[] b,int off,int len):写一个字节数组的一部分
 */
public class FileOutputStreamDemo2 {
	public static void main(String[] args) throws IOException {
		// 创建字节输出流对象
		// OutputStream os = new FileOutputStream("fos2.txt"); // 多态
		FileOutputStream fos = new FileOutputStream("fos2.txt");
		
		//public void write(byte[] b):写一个字节数组
		byte[] bys={97,98,99,100,101};
		fos.write(bys);
		
		//public void write(byte[] b,int off,int len):写一个字节数组的一部分
		fos.write(bys,1,3);
		
		//释放资源
		fos.close();
	}
}
/*
 * 复制文本文件。
 * 
 * 数据源:从哪里来
 * a.txt	--	读取数据	--	FileInputStream	
 * 
 * 目的地:到哪里去
 * b.txt	--	写数据		--	FileOutputStream
 * 
 * java.io.FileNotFoundException: a.txt (系统找不到指定的文件。)
 */
public class CopyFileDemo {
	public static void main(String[] args) throws IOException {
		// 封装数据源
		FileInputStream fis = new FileInputStream("a.txt");
//		FileInputStream fis = new FileInputStream("c:\\a.txt");
		// 封装目的地
		FileOutputStream fos = new FileOutputStream("b.txt");
//		FileOutputStream fos = new FileOutputStream("d:\\b.txt");
		int by = 0;
		while ((by = fis.read()) != -1) {
			fos.write(by);
		}

		// 释放资源(先关谁都行)
		fos.close();
		fis.close();
	}
}	
/*
 * InputStreamReader(InputStream is):用默认的编码读取数据
 * InputStreamReader(InputStream is,String charsetName):用指定的编码读取数据
 */
public class InputStreamReaderDemo {
	public static void main(String[] args) throws IOException {
		// 创建对象
		// InputStreamReader isr = new InputStreamReader(new FileInputStream(
		// "osw.txt"));

		// InputStreamReader isr = new InputStreamReader(new FileInputStream(
		// "osw.txt"), "GBK");

		InputStreamReader isr = new InputStreamReader(new FileInputStream(
				"osw.txt"), "UTF-8");

		// 读取数据
		// 一次读取一个字符
		int ch = 0;
		while ((ch = isr.read()) != -1) {
			System.out.print((char) ch);
		}

		// 释放资源
		isr.close();
	}
}
/*
 * OutputStreamWriter(OutputStream out):根据默认编码把字节流的数据转换为字符流
 * OutputStreamWriter(OutputStream out,String charsetName):根据指定编码把字节流数据转换为字符流
 * 把字节流转换为字符流。
 * 字符流 = 字节流 +编码表。
 */
public class OutputStreamWriterDemo {
	public static void main(String[] args) throws IOException {
		// 创建对象
		// OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(
		// "osw.txt")); // 默认GBK
		// OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(
		// "osw.txt"), "GBK"); // 指定GBK
		OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(
				"osw.txt"), "UTF-8"); // 指定UTF-8
		// 写数据
		osw.write("中国");

		// 释放资源
		osw.close();
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

By丶小辉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值