黑马程序员——学习日志9IO流

来源:互联网 发布:画房间平面图软件 编辑:程序博客网 时间:2024/06/05 09:28

------- android培训、java培训、期待与您交流! ---------- 



1、IO流基础

      IO流用来处理设备之间的数据传输;Java对数据的操作是通过流的方式;Java用于操作流的对象都在IO包中;流按操作对象分为两种:字节流与字符流。字节流可以操作任何数据,字符流只能操作纯字符数据比较方便;流按流向分为:输入流,输出流。

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

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

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

如:InputStream的子类FileInputStream。

如:Reader的子类FileReader。

InputStreamReader是Reader的子类

2、字符流读写文件

书写步骤:导入IO包中的类;进行IO异常处理;在finally中对流进行关闭

      FileWriter fw = new FileWriter(“1.txt”);fw.write(“xxx”);fw.flush();fw.close();

      FileReader fr = new FileReader(“1.txt”);intch=fr.read();fr.close();

注意:定义文件路径时Windows中的目录符号为“\”,但这个符号在Java中是特殊字符,需要转义。可以用“\\”或“/”表示。读取文件时必须保证文件存在,否则将抛出FileNotFoundException。写出时文件如不存在时程序会创建新文件,如文件已存在则会清空原文件内容重新写入。如需追加内容可调用FileWriter构造函数FileWriter(String fileName, boolean append)。

3、缓冲区

          缓冲区的出现提高了对数据的读写效率。对应类BufferedWriter BufferedReader。缓冲区要结合流才可以使用。在流的基础上对流的功能进行了增强。

          利用缓冲区读文件可以使用readline()方法,但是没有换行符,写的时候需要使用newline()方法。

4、装饰设计模式

          当我们需要对一个类的功能进行改进增强的时候,使用装饰设计模式。

          基本格式:含有被装饰类的引用;通过构造函数传入被装饰类对象;和被装饰类含有同样的方法,其中调用被装饰类的方法,对其进行改进、增强;和被装饰类继承同一个类或实现同一个接口,可以当做被装饰类来使用。

5、字节流

          基本操作和字符流类相同,OutPutStream不用flush()也可自动刷新。

          字节流缓冲区与字符流缓冲区相似。

6、转换流

          成员:InputStreamReader,OutputStreamWriter

          转换流的由来:字符流与字节流之间的桥梁;方便了字符流与字节流之间的操作

          转换流的应用:字节流中的数据都是字符时,转成字符流操作更高效。

7、标准输入输出流

          System类中的成员变量:in,out,它们各代表了系统标准的输入和输出设备。默认输入设备是键盘,输出设备是显示器。System.in的类型是InputStream。System.out的类型是PrintStream是OutputStream的子类FilterOutputStream 的子类

          BufferedReader br=newBufferedReader(new InputStreamReader(System.in))

          BufferdWriter bw=newBufferdWriter(new OutputStreamWriter(System.out))

8、流小结:

          流是用来处理数据的。处理数据时,一定要先明确数据源,或者数据目的地。数据源可以是文件,可以是键盘或者其他设备。数据目的地可以是文件、显示器或者其他设备。而流只是在帮助数据进行传输,并对传输的数据进行处理,比如过滤处理、转换处理等。

9、File对象

          用来将文件或者文件夹封装成对象;方便对文件与文件夹的属性信息进行操作;File对象可以作为参数传递给流的构造函数。

          getParent返回的是绝对路径的父目录

10、递归

          递归:函数自己调用自己。需要注意,递归时要确定结束条件。应用场景:当某一功能需要重复使用时。不要递归太多次,避免内存溢出。

递归操作列出目录下所有内容

public static void list(File f){

           System.out.println(f);

           File[] f1 = f.listFiles();

           for (int i = 0; i < f1.length;i++) {

                 if(f1[i].isDirectory())

                      list(f1[i]);

                 else

                      System.out.println(f1[i]);

                

           }

                     

           }

11、打印流

PrintStream 、PrintWriter:相比普通的OutputStream和Writer增加了print()和println()方法,这两个方法可以输出实参的toString()方法的返回值;这两个类还提供自动flush()的功能。

12、SequenceInputStream

可以将多个字节输入流整合成一个流,在使用这个流读取的时候,读到第一个流的末尾时继续读第二个,第二个读到末尾则继续读第三个,以此类推,直到读到最后一个流的末尾返回-1

13、 操作对象

ObjectOutputStream:可以将实现了Serializable的接口的对象转成字节写出到流中;ObjectInputStream:可以从流中读取一个ObjectOutputStream流写出的对象

静态不能被序列化。

14、管道流

PipedInputStream:管道输入流,可以从管道输出流中读取数;PipedOutputStream:管道输出流,可以向管道输入流中写出数据

15、RandomAccessFile

随机访问文件,自身具备读写功能,该文件指针可以通过 getFilePointer 方法读取,并通过 seek 方法设置。文件模式:只读r,读写rw。此类可实现多线程下载。

16、操作基本数据类型的流对象

DataInputStream、DataOutputStream可以按照基本数据类型占用空间大小读写数据。

17、操作数组的流对象

ByteArrayInputStream:可以从一个字节数组中读取字节

ByteArrayOutputStream: 写出到字节数组(内存)中,可以获取写出的内容装入一个字节数组。通常我们用这个流来缓冲数据

18、操作字符数组

CharArrayReader与CharArrayWrite

19、操作字符串

StringReader 与 StringWriter

20、编码表

计算机只能识别二进制数据,早期由来是电信号。为了方便应用计算机,让它可以识别各个国家的文字。就将各个国家的文字用数字来表示,并一一对应,形成一张表。这就是编码表。

ASCII:美国标准信息交换码。用一个字节的7位可以表示。

ISO8859-1:拉丁码表。欧洲码表。用一个字节的8位表示。

GB2312:中国的中文编码表。

GBK:中国的中文编码表升级,融合了更多的中文文字符号。

Unicode:国际标准码,融合了多种文字。所有文字都用两个字节来表示,Java语言使用的就是unicode 。

UTF-8:最多用三个字节来表示一个字符

 

 





------- android培训、java培训、期待与您交流! ----------

0 0
原创粉丝点击