java之IO流笔记1

1.File 文件类

  文件后缀(文件扩展名):

.txt文本格式

.exe可执行的应用程序

.pdf 文本

.java   .class  

压缩文件:.jar  .zip  .rar 

配置文件: .log  .xml  .properties

——————————————————————————————————-------------------------------

目录/文件夹(diretory):文件夹里面可以存储文件、文件夹

文件(file):带有文件扩展名

绝对路径:从根文件夹开始的路径(path),windows系统一般根文件夹为系统盘,例如C:/

        Linux系统一般以root作为根文件夹\root

相对路径:从当前文件夹开始的路径,在Java中,当前文件夹自己判断

1.1 对象实例化格式: File 对象名称=new File(路径名); //此处路径名为对象默认指定的初始路径

1.2 按对象指定路径创建文件: 对象名称.creatNewFile();

1.3 按对象指定路径创建目录(文件夹):

   对象名称.mkdir();//只创建一层文件夹

   对象名称.mkdirs();//可以创建多层文件夹

1.4 删除对象指定路径的文件/目录:

   对象名称.delete();-----慎用,建议使用U盘练习

1.5 修改对象指定路径文件/目录名:

   对象名称.renameTo(新的文件对象); 

1.5 递归调用:方法调用自己本身

1.6 递归调用遍历所有文件   

2.IO流(大部分在java.io.*)

  按存储方式分为字节流(按字节的方式进行读写,容易出现乱码)和字符流(按字符的方式读写)

  按读写过程分为输入流(读到项目中)和输出流(写到项目外)

  其他的分类:按操作的内容:数据流、对象流、文件流

 2.1字节流 

  抽象类InputStream 外部(如指定文件资源)-->内部(如Myeclipse自定义的数组)  

            read方法(Myeclipse去读取指定位置的资源)   输入流  向MyEclipse输入

  抽象类OutputStream  内部(如Myeclipse自定义的字节流数组)--->外部(如指定文件资源)

    write方法(Myeclipse将资源写入指定位置)   输出流  从MyEclipse输出

 2.2字符流

   抽象类Reader  输入流

   抽象类Writer  输出流

 2.3 IO流操作文件的流程

  a.File类指定待操作的文件路径

  b.FileInputStream/FileOutputStream 指定输入/输出流输入/输出的指定路径

  c.流读/写操作  read()  write()

  d.关闭流  close()

  

 2.4 字节流与字符流的区别:

    a.字节流没有缓冲区域,直接对文件进行操作(即使不关闭流也会输出内容) 

1字节byte=8位bit  位是计算机最小的存储单元  1字符char=2字节byte

b.字符流首先将字节流转换成字符流存在缓冲区域,然后再通过缓冲区域对文件进行操作

  (字符流必须关闭流或刷新缓存才会将缓存区的内容输出)

c.所有的文件在硬盘或者传输时都是以字节的方式进行的,而字符只在内存中形成(例如缓冲区域),

所以在开发时使用字节流会好一些

d.字节流可以适用于图片、音频等;字符流只能处理字符及字符串

e.若一个文件资源需要被频繁读取的话可以使用字符流,将资源存入缓冲区中,

 因为读取内存的速度相对于读取硬盘的速度会更快

 2.5 使用流复制文件:

  2.5.1 不带缓存

 int tmp=0;

 while((tmp=is.read()!=-1){  //边读边写 is为输入流对象  os为输出流对象

  os.write(tmp);

 }

 2.5.2 有缓存

 byte[] b=new byte[len]; //len为缓冲存储字节数

 int tmp;

while((tmp=is.read(b)!=-1){                                                                                      

 os.write(b,0,tmp);//读多少个字节就写多少个字节

读到的内容:12345    78 字节数组b:12345   78345   os.write(b)写出来:12345 78345

os.write(b,0,tmp)写出来:12345  78

 2.6字节与字符的转换流:(了解)

 InputStreamReader   抽象类Reader的子类,将输入的字节流转换为字符流

 OutputStreamReader  抽象类Writer的子类,将输出的字符流转换为字节流

 2.7 打印流(输出流OutputStream的子类)(了解) 

  PrintStream

  PrintWriter

  

 2.8 System类常量(了解)

   System.in  输入流InputStream     系统标准输入,一般对应键盘输入  Scanner scan=new Scanner(System.in)

   System.out  打印流PrintStream    系统标准输出,一般对应显示器   打印出来给客户看

   System.err  打印流PrintStream     错误信息输出  打印出来给程序员看

 setIn()  setOut() setErr()

 2.9 压缩流  java.util.*包下面 (了解)  压缩成.zip格式

  ZipInputStream   将压缩文件解压输入应用程序中

  ZipOutputStream  将文件压缩输出到应用程序外

   ZipEntry  表示压缩包文件条目  

   ZipFile  从Zip文件读取条目

 比较压缩效率(空间) 压缩时间(时间)

 注意:每处理完一条条目时需要关闭当前条目,避免出现数据丢包的异常

   java.util包下的压缩流限定使用UTF-8格式读写,若想更改编码读写格式,可以导入jar包:ant-1.6.5.jar

   使用org,apache.tools.zip.*下的类进行压缩流操作

 2.10 对象流  ObjectInputStream  ObjectOutputStream

   a.对象流只能对支持 java.io.Serializable 或 

   java.io.Externalizable(作用类似于关键字transient,可过滤序列化的属性) 接口的对象进行操作。

   b.序列化:就是将对象转为字节流的过程,可以永久的保存在文件中。

   c.反序列化:将字节流数据还原成对象的过程

   d.可序列化的对象必须实现接口Serializable

   e.可使用关键字transient禁止某一个对象属性序列化 

   f.对象流写入对象时有一个默认的方法去写表头,表示写入的是对象的数据

     writeStreamHeader();  写表头的方法 调用ObjectOutputStream构造方法时自动调用

 一个存储对象字节流的文件只能有一个表头;

 对多个对象进行序列化时需要重写writeStreamHeader()方法,

 重写后的方法不需要执行任何操作(空实现)

 注意:若反序列化的JDK版本与序列化版本不一致,可能会出现不兼容的问题,一般建议

 在序列化时注明JDK版本号,即在实体类中增加常量serialVersionUID

 2.11 MVC三层设计模式

  com.pojo 实体层  存放对象模型(图纸)

  com.biz  业务接口  一般定义增删改查的方法

  com.dao  业务层  实现接口逻辑  实现增删改查

  com.view 视图层  展示结果 

 2.12 BufferedReader 从缓冲区读取文本数据

      BufferedWriter  将文本数据写入缓冲区  

  通常作为字符流的包装流使用,提高读写效率

  

 2.13 字符编码: Charset

 ISO8859-1  单字节编码  0-255个字符 适用于英文

 GBK/GB2312  双字节编码 专门表示汉字  GBK简繁体通用  GB2312只适用于简体字

 unicode  使用十六进制编码(双字节),java标准编码(JVM可以直接识别的编码),与 ISO8859-1不兼容

 UTF  不定长编码,1-6个字节不等 兼容ISO8859-1  一般中文网页使用此编码

 UTF-8可以适用于英文与中文,一般编码习惯使用UTF-8

 一般类开放改变编码格式,方法一般命名为:setEncoder()  setCharset()

 URLEncoder.encoder(String str,String charsetName)字符编码,将字符串按指定的字符集编码格式转为一系列的数字编码

 URLDeCoder.decoder(String str,String charsetName)解码。将一系列的数字编码按指定的字符集编码格式转为字符串

 获取本机编码的方法:System.getProperty("file.encoding")

 字符串设定编码的方法:String.getBytes(String charsetName) //参数为设定的编码名

猜你喜欢

转载自blog.csdn.net/wu1317581750/article/details/81187575
今日推荐