黑马程序员IO流Part1
来源:互联网 发布:python win32api 64 编辑:程序博客网 时间:2024/04/30 06:05
------- android培训、java培训、期待与您交流! ----------
IO流用来处理设备之间的数据传输;
Java对数据的操作是通过流的方式;
Java用于操作流的对象都在IO包中;
流按操作数据分为两种:
字节流和字符流;
流按流向分为:输入流,输出流。
字节流的抽象基类:InputStream,OutputStream
字符流的抽象基类:Reader,Writer;
流操作的基本规律:
1、明确源和目的;
2、操作的数据是否为纯为本;
3、当体系明确后,在明确要使用哪个具体的对象。
FileWriter,FileReader类:
操作流程:
1、创建相应的流对象,该对象被初始化时必须要明确被操作的文件。而且该文件会被创建到指定
目录下。如果该目录下已有同名文件,将被覆盖(调用第一个构造函数)。
2、进行相应的读写操作;
3、是否需要进行刷新操作,如果需要,则需要进行刷新;
4、关闭流,释放资源。
FileWriter:
class FileWriterDemo { public static void main(String[] args) throws IOException { /*创建一个FileWriter对象。该对象一被初始化就必须要明确被操作的文件。*/ FileWriter fw = new FileWriter("demo.txt"); //调用write方法,将字符串写入到流中。 fw.write("abcde"); /*刷新流对象中的缓冲中的数据。 将数据刷到目的地中。*/ //fw.flush(); /*关闭流资源,但是关闭之前会刷新一次内部的缓冲中的数据。 将数据刷到目的地中。 和flush区别:flush刷新后,流可以继续使用,close刷新后,会将流关闭。 */ fw.close(); } }
文件的续写:通过构造方法创建可续写文件的流对象。
public static void main(String[] args) throws Exception { FileWriter fw = new FileWriter("demo.text",true);//续写,不覆盖已有的文件 fw.write("abc"); fw.close(); }
文件拷贝代码片段:
通过FileReader读取指定文件中的内容,创建一个1M大小字符数组缓冲区,再由FileWriter流对象写入指定的目标文件。
public static void copy_2() throws Exception { FileReader fr = new FileReader("D:\\testsrc.txt");//创建FileReader对象指向要读取的文件 FileWriter fw = new FileWriter("D:\\dest.txt");//创建FileWriter对象指向要写入的目的文件 int len = 0; char[] buf = new char[1024];//创建一个缓冲区 while((len=fr.read(buf)) != -1) { //读取文件内容 fw.write(buf,0,len);//写入文件内容 } fr.close(); fw.close(); }
字符流的缓冲区:
缓冲区的出现提高了对数据的读写的效率;
对应类:BufferedWrite, BufferedReader;
缓冲区要结合流才可以使用。
在流的基础上对流的功能进行了增强。
BufferedWrite提供了一个跨平台的换行方法,newLine();
BufferedReader提供了一个读一行的方法,readLine()不包含行终止符。当返回null是,表示已经读到了文件的末尾。
因为在BufferedReader和BufferedWrite中调用了相应的流对象,所以只需要关闭BufferedReader和BufferedWrite,释放资源。
装饰设计模式:
当想要对已有的对象进行功能增强时,可以定义一个类,将已有对象传入,基于已有的功能,并提供加强功能。那么自定义的该类称为装饰类。继承和装饰的区别:
装饰模式比继承更灵活,避免了继承体系的臃肿,而且降低了类与类之间的关系。
装饰类因为增强已有对象,具备的功能和已有对象是相同的,只不过提供了更强的功能,所以装饰类和被装饰类通常属于同一个体系中。
read 方法返回的为什么是int类型,而不是byte类型:
为了防止凑巧读取到8个1(十进制的-1),这样正好符合了判断条件,而此时文件并没有读取结束,所以将byte类型提升为int类型,由4个字节来存放数据,前3个字节补0(方法是将提升后的数据与255进行与运算),避免了出现-1的情况,也保证了原数据没有变化。而write方法在执行时,又将4个字节的int类型转换为了1个字节的byte类型。
------- android培训、java培训、期待与您交流! ----------
- 黑马程序员IO流Part1
- 黑马程序员-JAVA高级(IO输入与输出)PART1
- 黑马程序员 IO流
- 黑马程序员IO流
- 黑马程序员-IO流
- 黑马程序员---IO流
- 黑马程序员-----IO流
- 黑马程序员--io流
- 黑马程序员:IO流
- 黑马程序员----IO流
- 黑马程序员--IO流
- 黑马程序员-IO流
- 黑马程序员:IO流
- 黑马程序员IO流
- 黑马程序员:IO流
- 黑马程序员-IO流
- 黑马程序员---IO流
- 黑马程序员---IO流
- 自己动手将在线文档制作成CHM文件
- 写 Java 代码的注意事项
- 批处理命令简介
- 黑客常用的cmd命令
- jdbc 通过模板的设计模式 封装基本数据库操作
- 黑马程序员IO流Part1
- ListView常用的操作
- 批处理应用_刷空间访问量
- 计算二叉树中叶子结点的数目
- 100行代码实现最简单的基于FFMPEG+SDL的视频播放器
- 笑一下喽
- 【UNIX网络编程(四)】TCP套接字编程详细分析
- C#面向对象 多态的实现之 - 虚方法和抽象类:
- 复制一棵二叉树的非递归算法