`
zhongsw
  • 浏览: 23575 次
文章分类
社区版块
存档分类
最新评论

黑马程序员_Java中IO流知识点及总结.

阅读更多

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

 

 

 

 

 

 

System: 类中的方法和属性都是静态的 .

out: 标准输出 , 默认是控制台

in: 标准输入 , 默认是键盘 .

获取系统属性信息 :Properties getProperties();

 

Runtime 对象

该类没有提供构造函数 , 说明不可以 new 对象 . 那么会直接想到该类中方法都是静态的 , 但该类中还有非静态方法 . 说明该类肯定会提供了方法获取本类对象 , 而且该方法是静态的 , 并返回值类型是本类类型 . 该类使用了单例设计模式 .

该方法是 static Runtime getRuntime();

Runtime r=Runtime.getRuntime();

r.exec(“xxx.exe”);

 

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

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

Java 用于操作流的对象都在 IO 包中

流按操作数据分为两种:字节流与字符流

按流向分为:输入流,输出流

字节流的抽象基类

InputStream outputStream

字符流的抽象基类

Reader Writer

 

IO 异常处理方式 , 在外面建立 null 引用 , try 内初始化 , finally 里关闭资源 .

一个标准的 IO 处理异常

import java.io.FileWriter;

 

public class FileWriterDemo {

    public static void main(String[] args){

       FileWriter fw= null ;

       try {

           fw = new FileWriter( "demo.txt" );

           fw.write( "nihaoma?" );

          

       } catch (Exception e) {

           e.printStackTrace();

       } finally {

           try {

              if (fw!= null )

              fw.close();

           } catch (Exception e) {

              e.printStackTrace();

           }

       }

    }

}

 

字符流的缓冲区

缓冲区的出现提高了对数据的读写效率

对应类

BufferedWriter       BufferedReader

缓冲区要结合流才可以使用 , 在流的基础上对流的功能进行了增强 .

缓冲区的出现是为了提高流的操作效率而出现的 . 所以在创建缓冲区前 , 必须要先有流对象 . 只要将需要被提高效率的流对象作为参数传递给缓冲区的构造函数 .

其实关闭缓冲区就是在关闭缓冲区中的流对象 .

 

 

装饰设计模式 :

当想要对已经对象进行功能增强时 , 可以定义一个类 , 将该对象传入 , 基于已有对象的功能并提供加强功能 , 那么自定义的该类就称为装饰类 .

装饰类通常会通过构造方法接收被装备的对象 . 并基于被装饰的对象的功能提供加强的功能 .

 

字符流 :

FileReader

FileWriter

 

BufferedReader 缓冲区

BufferedWriter

 

字节流 :

FileInputStream     FileOutputStream

BufferedInputStream     BufferedOutputStream 缓冲区

 

读取转换流 .InputStreamReader

键盘录入 .BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));

 

写入转换流     OutPutStreamWriter

控制台输出 :BufferedWriter buwr=new BufferedWriter(new OutputStreamWriter(System.out));

 

上面可以通过 System.setIn System.setOut 来设置对应的源和目的 .

 

转换流什么时候用 ?

字符和字节之间的桥梁 , 通常波及到编码转换时要用到转换流 .

 

流操作的基本规律 :

1.       明确源和目的

2.       操作的数据是否是纯文本 .

3.       当体系明确后 , 在明确要使用哪个具体对象 . 是否要提高效率 . 来加入转换流 .

 

IO File 类是文件和目录路径名的抽象表示形式。

用来将文件或者文件夹封闭成对象 .

方便对文件与文件夹的属性信息进行操作 .

File 对象可以作为参数传递给流的构造函数 .

separator 字段是目录分隔符 .

File f=new File(“a.txt”);// a.txt 封闭成 file 对象 . 可以将已有的和末出现的文件夹封装成对象 .

File f2=new File(“c:\\abc”,”b.txt”);//”b.txt” 可以传一个可变的参数 .

syso(f);// 打印文件的路径 , 按封装时的格式打印出来 .

File 常见方法 .

1.       创建 boolean  createNewFile();

2.       删除 boolean delete();  void deleteOnExit();  mkdir();  new File(“abc\\kk”).mkdir();

mkdirs(); 创建多级文件夹 .

3.       判断        Boolean   exists(); 文件是否存在 .

isDirectory();isFile(); 通过这两方法可以判断封装完的对象是什么 ?

4.       获取信息 .getXXX();

 

列出目录下的所有内容 , 递归 .

1.       递归注意限定条件 .

2.       注意递归的次数 , 不要内存溢出 .

 

Properties hashtable 的子类 . 也就是说它具备 map 集合的特点 , 而且它里边存储的键值都是字符串 . 是集合和 IO 技术相结合的集合容器 .

该对象的特点 : 可以用于键值对形式的配置文件 .

 

 

InputStreamReader 和OutputStreamWriter
明白这是什么转换流?按操作数据它们是什么流?
看JDK:InputStreamReader 是字节流通向字符流的桥梁;OutputStreamWriter 是字符流通向字节流的桥梁
明白这为什么是这样?明确接收什么流类型?为什么转成另一种流类型和转的过程?
我认为彻底明白了上面这些问题才算明白IO流的基础,才能知道什么流何时用合适.
自己刚学时也是一点不明白.到后面复习知识点时这在脑海中思路才清晰起来.

 

 

 

打印流 PrintWriter PrintStream       可以直接操作输入流和文件 .

该流提供了打印方法 , 可以将各种数据类型的数据都原样打印 .

PrintStream 构造函数可以接收的参数类型 :

1.       file 对象 .  File

2.       字符串路径 .    String

3.       字节输出流 .    OutputStream

字符打印流 :PrintWriter 构造函数可以接收的参数类型 :

1.       file 对象 .  File

2.       字符串路径 .    String

3.       字节输出流 .    OutputStream

4.    字符输出流     Writer

 

序列流 SequenceInputStream      对多个流进行合并 .

表示其他输入流的逻辑串联 . 可以接收多个字节流对象 , enum 形式来表示 .

 

操作对象 ObjectInputStream ObjectOutputStream 被操作的对象需要实现 Serializable( 标记接口 ).

 

管道流 PipedInputStream PipedOutputStream

对应的用 connect 相连接 .

随机访问文件 RandomAccessFile

该类直接继承自 Object, 不算是 IO 体系中子类 , 因为具备读写所以是 IO 包中成员 .

内部封装了一个数组 , 而且通过指针对数组元素进行操作 . 可以通过 getFilePointer 获取指针位置 , 还可以通过 seek 改变指针位置 .

其实能完成读写的原理就是内部封装了字节输入流和字节输出流 , 该类只能操作文件 . 而且操作文件还有模式 .    r  rw

该对象的构造函数要操作的文件不存在会自动创建 , 如果存在不会覆盖 .

如果模式为 r 不会创建文件 , 只会读取 , 文件如果不存在会出异常 .

如果模式为 rw, 文件不存在会创建 , 在不会覆盖 .

 

操作基本数据类型的 IO

DateInputStream DateOutputStream

操作字节数组

ByteArrayInputStream ByteArrayOutputStream

这两个流对象都操作的数组 , 并没有使用系统资源 , 所以不用 close 关闭 .

内存就是 ArrayStream, 用流的读写思想操作数组 .

 

操作字符数组

CharArrayReader CharArrayWriter

操作字符串

StringReader StringWriter

 

字符编码 :

编码 : 字符串变成字节数组   String à byte[];     str.getBytes();

解码 : 字节数组变成字符串 .  byte[] à String:      new String(byte[]);

服务器用的是 ISO8859-1

<待续>

 

 

 

 

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics