大数据学习路线分享IO流学习笔记-IO流(input/output):
作用:实现两个设备之间数据的传递
设备:磁盘(硬盘),内存,键盘,文件,网络,控制台
网络:当前主机之外的网上资源
分类:
根据操作的方式:输入流和输出流 ---因**内存**为参考
根据数据的类型:字节流和字符流
字节流:
字节输入流:InputStream
字节输出流:OutputStream
字符流的两个父类:
字符读入流(将数据输入内存):Reader
字符写出流(将数据从内存取出):Writer
实例:研究字符流
以磁盘的数据存储为例,将数据写入文件
分析:因为操作的是文本,所以使用字符流
* 写入文件-----写出流------FileWriter
* 读文件------读入流-------FileReader
代码:
FileWriter fileWriter = new FileWriter("test1.txt");
//注意点:
//一:如果只写文件的名字,不写具体路径,默认路径是当前的工程
//二:对于关联的文件,如果之前不存在,程序会自动创建一个,如果存在,会将原来的内容覆盖
//三:可以自己指定路径,但是必须保证路径是真实存在的,否则报异常---FileNotFountException(系统找不到指定的路径。)
fileWriter.write("chenchen");
//四:在执行write方法时,数据被临时放到了流对象的内部数组中,这个数组是一个字节数组,会默认去查编码表
//fileWriter.flush();
//刷新---将临时数组中的数据放入磁盘
fileWriter.close();
//关闭流--两个功能:a:关闭流 b:刷新
//第五个注意点:流对象使用完后必须关闭
//fileWriter.write("haha");
//第六个注意点:当流对象关闭之后,不能再进行操作,否则会报异常:Stream closed
//fileWriter = new FileWriter("test2.txt",true);
//文件的续写:FileWriter(String file,boolean value)
//当value位true的时候,不会将原来的内容覆盖,会接着写
读内容:
实例:从文件中读取内容,并显示在控制台------FileReader
//1.创建FileReader的对象
FileReader fileReader = new FileReader("test2.txt");
//2.读
read():一个字符一个字符的读,每次读出一个字符
read(数组):一次可以读出多个字符 ,数组的作用:每次会将读出的字符临时放到这个数组中
/
//read():一个字符一个字符的读,每次读出一个字符 while ((num = fileReader.read())!= -1) { System.out.println((char)num); }
//read(数组):一次可以读出多个字符 ,数组的作用:每次会将读出的字符临时放到这个数组中
/数组是临时存放数据的地方,我们会将读到的字符放到临时数组中,数组的大小决定了我们一次可以读到的字符个数.
一般这个数组的大小<=1kB
返回值代表本次读到的真实的字符个数,如果返回值是-1代表读完了
char[] arr = new char[2]; int num = 0; while ((num = fileReader.read(arr)) != -1) { System.out.println(new String(arr,0,num)+" num:"+num); }
实例:完成文件的复制
将Demo1的东西复制到Demo1copy.java
D:\workspace\BigDataSZ1903N19\src\com\qianfeng\test\Demo1.java:绝对路径
BigDataSZ1903N19\src\com\qianfeng\test\Demo1.java:相对路径
相对路径:从路径中间的某个部位开始一直到当前的文件
绝对路径:一个文件的完整路径,从根目录开始到当前的文件
补充知识:
\代表转义字符 \t:制表符 \n换行符 \\:表示普通的\
在代表路径的时候,\\与/是一个意思.
//1.创建读入流和写出流
FileReader fileReader = new FileReader("D:\\workspace/BigData1923N19\\src\\com\\qf\\test\\Demo1.java");
FileWriter fileWriter = new FileWriter("Demo1copy.java");
字符缓冲流(字符缓冲区)
定义:为了提高读写的能力,本身没有读写的能力,要想进行读写就必须借助于字符流实现.
可以将缓冲流类比于催化剂或者高速的小车
字符缓冲流分类:
字符缓冲读入流:BufferedReader 没有读的能力
字符缓冲写出流:BufferedWriter 没有写的能力
//0.创建字符写出流对象
//1.创建字符缓冲写出流对象
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("text3.txt"));
//2.写
bufferedWriter.write("bingbing");
//windows系统 换行符 \r\n linux/unix 换行符 \n
//bufferedWriter.write("\r\n");//换行
bufferedWriter.newLine();//换行---支持跨平台
bufferedWriter.write("chenchen");
//3.关闭资源 a.关闭内部的写出流 b.关闭自己 c.刷新
bufferedWriter.close();
//1.创建字符缓冲读入流
BufferedReader bufferedReader = new BufferedReader(new FileReader("text3.txt"));
//一次读一行 readline()
//原理:一个字符一个字符的读,直到读到换行符为止.然后将所有读到的字符返回
//注意点:不会将当前的换行符返回 ;返回值就是我们读到的内容.如果读完了,返回null
String data = null; while ((data = bufferedReader.readLine()) != null) { System.out.print(data); //System.out.println();//换行 System.out.print("\r\n"); } bufferedReader.close();