目前我们学习IO的对象基本都是在操作文件和文件中的数据,但是数据来源不全都是文件,也可以使用键盘或者其他地方。那么怎么读取键盘数据呢?
当要读取多个字符怎么办呢?
思路:
读取一个字节先不要操作,将其存储起来,转成一个字符串。能不能一次就读取一行字符串呢?readLine();可是readLine()是BufferedReader方法。BufferedReader使用时必须接收字符流对象。键盘录入是字节流。要是将字节流转成字符流是不是就哦了呢?咋转呢?节流—桥梁InputStreamReader—>字符流
这个示例中既要用到输入流,也要用到输出流。而且操作的数据都是文本数据,可以使用字符流。而且目的是文件可以使用操作文件的字符输出流。
IO流中对象很多,解决问题(处理设备上的数据时)到底该用哪个对象呢?
把IO流进行了规律的总结(四个明确):
明确一:要操作的数据是数据源还是数据目的。
源:InputStream Reader
目的:OutputStream Writer
先根据需求明确要读,还是要写。
明确二:要操作的设备上的数据是字节还是文本呢?
源:
字节:InputStream
文本: Reader
目的:
字节:OutputStream
文本:Writer
已经明确到了具体的体系上。
明确三:明确数据所在的具体设备。
源设备:
硬盘:文件 File开头。
内存:数组,字符串。
键盘:System.in;
网络:Socket
目的设备:
硬盘:文件 File开头。
内存:数组,字符串。
屏幕:System.out
网络:Socket
完全可以明确具体要使用哪个流对象。
明确四:是否需要额外功能呢?
额外功能:
转换吗?转换流:InputStreamReader OutputStreamWriter
高效吗?缓冲区对象:BufferedXXX
需求:文件切割,将一个比较大的文件切割成多个碎片文件。文件切割有2中方式。
第一种:指定具体切割成多少文件。
第二种:指定每个碎片的大小,直到把文件切割完成。
思路:
- 读取源文件,将源文件的数据分别复制到多个文件中。
- 切割方式有两种:按照碎片个数切,要么按照指定大小切。
- 一个输入流对应多个输出流。
- 每一个碎片都需要编号,顺序不要错。
- 将源文件以及切割的一些信息也保存起来随着碎片文件一起发送。
代码体现:
Properties特点:
1、的子类,map集合中的方法都可以用。
2、该集合没有泛型。键值都是字符串。
3、它是一个可以持久化的属性集。键值可以存储到集合中,也可以存储到持久化的设备上。键值的来源也可以是持久化的设备。
4、有和流技术相结合的方法。load(InputStream) load(Reader) store(OutputStream,commonts); stroe(Writer,comments);
将配置文件中的数据存储到文件中
读取配置文件中的数据,同时更新数据并保存。