黑马程序员--Java基础--09IO(一)

----------- android培训java培训java学习型技术博客、期待与您交流! ------------


Java中的流

    Io流用来处理设备之间的数据传输

  Java对数据的操作是通过流的方式

    Java用于操作流的对象都在io包里

黑马程序员--Java基础--09IO(一)_第1张图片

流的分类

流分为输入流和输出流

输入流包含字节输入流和字符输入流

输出流包含字节输出流和字符输出流

黑马程序员--Java基础--09IO(一)_第2张图片

Io流常用基类:

字节流的抽象基类:InputStream,OutputStream。                 

字符流的抽象基类:Reader,Writer。

注:由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀。

 

 

例子1

    向硬盘中的文件写入内容,因写入的内容为全部为文本格式的字符,因此选用字符输出流实现,代码如下:

public class IoTest {
	public static void main(String[] args) {
		FileWriter fw = null;   //创建字符输出流对象
		FileWriter fw1 = null;
		try {
			//使输出流对象与硬盘中的文件相关联
			fw = new FileWriter("j:\\aa.txt");  
			//使输出流对象与硬盘中的文件相关联,true表示续写内容
			fw1 = new FileWriter("j:\\aa.txt", true);
			//调用write方法向文件中写入内容
			fw.write("asasfadfda");
			//刷新操作
			fw.flush();
			//符号\r\n表示换行
			fw1.write("\r\ndadsa\r\ndasdasfa");
			fw1.flush();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (fw != null)
					//关闭流用以释放底层资源
					fw.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			try {
				if (fw1 != null)
					fw1.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

对于写操作来说,当关联到的硬盘文件不存在时,将自动创建相应文件并写入相关内容。

 

例子2

通过字符输入输出流实现文本复制功能,文件复制其实就是频繁的读入写出操作,关键在于对文件类型及流的选择上。

代码如下:

//创建字符输入输出流对象
		FileReader fr = null;
		FileWriter fw = null; 
		try {
			//使字符输入输出流与文件关联
			fr = new FileReader("j://aa.txt");
			fw = new FileWriter("j://bb.txt");
			//创建字符数组用以存储输入流读取的内容
			char[] ch = new char[1024];
			int num = 0;
			//使用频繁的读取写入操作完成文件复制
			while ((num = fr.read(ch)) != -1) {
				fw.write(ch, 0, num);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (fr != null)
					//关闭流用以释放底层资源
					fr.close();
			} catch (IOException e1) {
				e1.printStackTrace();
			}
			try {
				if (fw != null)
					//关闭流用以释放底层资源
					fw.close();
			} catch (IOException e) {
				e.printStackTrace();
			}

		}

例子3

完成硬盘中图片文件的复制操作,因图片文件为字节文件,因此选用字节流操作,同样是频繁的读入写出操作,代码如下:

//创建字节输入输出流对象
		FileInputStream fr = null;
		FileOutputStream fw = null;
		try {
			//使字节输入输出流与文件关联
			fr = new FileInputStream(new File("J://1.bmp"));
			fw = new FileOutputStream(new File("J://2.bmp"));
			//创建字节数组用以存储输入流读取的内容
			byte[] buf = new byte[1024];
			int len = 0;
			//使用频繁的读取写入操作完成文件复制
			while ((len = fr.read(buf)) != -1) {
				fw.write(buf, 0, len);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (fr != null)
				try {
					//关闭流用以释放底层资源
					fr.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			if (fw != null)
				try {
					//关闭流用以释放底层资源
					fw.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
		}


缓冲区

缓冲区的出现是为了提高流的操作效率而出现的。

所以在创建缓冲区之前,必须要先有流对象。

该缓冲区中提供了一个跨平台的换行符,newLine();

黑马程序员--Java基础--09IO(一)_第3张图片

例子:

// 创建字符输入输出缓冲流对象
		BufferedReader br = null;
		BufferedWriter bw = null;
		try {
			//InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。
			//它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。
			//建立输入缓冲关联文件
			br = new BufferedReader(new InputStreamReader(new FileInputStream(
					"J://aa.txt")));
			// OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 charset
			// 将要写入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。
			// 因System.out返回的为PrintStream因此使用该流进行转换
			// 建立输出缓冲并打印在控制台上
			bw = new BufferedWriter(new OutputStreamWriter(System.out));
			//字符串用以存储读取的每行内容
			String line = null;
			while ((line = br.readLine()) != null) {
				//向控制台写入
				bw.write(line);
				//换行符
				bw.newLine();
				//刷新
				bw.flush();
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (br != null)
				try {
					//关闭流用以释放底层资源
					br.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			if (bw != null)
				try {
					//关闭流用以释放底层资源
					bw.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
		}

输出结果:

黑马程序员--Java基础--09IO(一)_第4张图片


----------- android培训java培训java学习型技术博客、期待与您交流! ------------

你可能感兴趣的:(黑马程序员--Java基础--09IO(一))