IO流

IO流

I/O 输入、输出 流(数据流动)
数据流动的方向 读数据(输入input) 写数据(输出output)
文件流 字符流 对象流 网络流.......

1. File

与电脑上的文件或文件夹产生一一对应的映射关系

文件:

电脑上的一种存储形式

文件有不同的格式 .txt .doc .ppt .mp4 .jpg .rar ...
文件夹---目录路径

1.文件或目录路径名(文件夹)的抽象表示形式

2.File与真实硬盘中的文件或文件夹 不是一个东西

File是内存中的一个对象<--映射-->硬盘上的文件或文件夹

2.File类中的常用方法

canRead() canWrite() isHidden() isFile() isDirectory()

length()

获取文件中字节的个数

lastModified()

获取文件最后的修改时间-毫秒值

*getAbsolutePath()

获取文件的绝对路径 d://text

绝对路径-->可以通过完整的字符串 定位盘符 文件夹 文件
相对路径没有盘符的写法-->当前项目的所在位置找寻(F:\workplace\SSM\javase\text\22.txt)

*getName()

获取文件的名字 text.txt

creatNewFile() 创建文件

创建文件夹

madkir()

外层没有不能创建

madkirs()

外层没有,也会同时创建

*getParent()

获取当前file的父文件名

**getParentFile()

获取当前file的父亲对象

String[] names=list()

获取当前file对象所有子元素的名字

File[] files=listFiles()

获取当前file的所有的儿子对象

delete()

删除文件或空的文件夹,不能删掉带元素的文件夹
1.文件夹的遍历---需要递归        
2.什么叫文件流 
读取文件中的内容          向文件中中写内容
文件输入流               文件输出流
字节型文件输入流          字节型文件输出流
字符型文件输入流          字符型文件输出流  

stream

1.io

 流按照方向(功能)来区分
       in(读取)  out(写入)
  操作的目标来区分
       文件流 数组流 字符串流 数据流 对象流 网络流......

2.字节IO流:

1.字节型文件输入流:

FileInputStream
1.包 java.io
2.父类--InputStream
3.创建对象

调用一个带File类型的构造方法

File file = new File( new File());

调用一个带String类型的构造方法

File file = new File("d://test//test.txt");
4.常用方法:
int code=read()       每次从流管道中读取一个字节 字节的code码
*int count=read(byte[])   每次从管道中读取若干个字节 存入数组内 返回有效元素个数
new byte[1024]         通常创建的数组 1kb-8kb之间 1kb-1024字节
int count=available()      返回流管道中还有多少缓存的字节数
*skip(long n)          跳过几个字节 再读取
*close() 关闭流通道 必须要做 放到finally 注意代码的健壮性(考虑空指针)
多线程-->利用几个线程同时读取文件
10000字节 5个小人同时读取
1-2000 2001-4000 4001-6000......

2.字节型文件输出

FileOutStream
1.java.io
2.继承OutputStream 所有字节型输入流的父类
3.创建对象
new FileOutStream(File) new FileOutStream(File,append)
new FileOutStream(String) new FileOutStream(String,append)
4.常用方法:
write(int code);将给定的code对应得字符写入文件
write(byte[]) 将数组中的全部文件写入文件 
flush() 将管道内的字节推入文件
close() 关闭流通道

3.特点

字节流优点在于什么类型的文件都可以处理
缺点在于处理纯文本文件时可能会产生乱码问题

3.字符型IO流

只能操作纯文本文件.txt 。properties /.doc(不是)

FileReader

1.java.io
2.继承 InputStreamReader Reader
3.构造方法(file,string)
reead()
read(char[])

FileWriter

2.继承 OutputStreamWriter Writer
3.构造方法
file boolean
string boolean

4.常用方法

write(int)
write(char[])
write(string)
flush close
编码问题:
字节型: String s="fe";
      byte[]=s.getBytes("utf-8");
      new String(byte[],"utf-8");     
字符型:通过修改文件或ide编码格式

4.文件流

 读取文件中的信息in 将信息写入文件中out
    文件流按照读取或写入的单位(字节数)大小来区分
    
   字节型文件流(1字节)
        FileInputStream/FileOutStream
   字符型文件流(2字节-1字符)
        FileReader/FileWriter
       读取文件中的内容          向文件中中写内容
       文件输入流               文件输出流
       字节型文件输入流          字节型文件输出流
       字符型文件输入流          字符型文件输出流         
 容器
 1.容量 只能存一份
 2.数组  存储好多个 数据类型统一
 3.集合 存储好多个 存储后个数还能改变 泛型--数据类型统一
 如上三个都是java中的类型(对象-->内存)
  都存储在内存中 程序执行完毕 虚拟机停止的时候 内存空间就回收了
 4.文件 存储好多信息
 文件时存储在硬盘上的-->永久性保存
 数据虽然安全 但文件不在内存中 需要通过io操作文件    

5.缓冲流

在流管道内增加缓存的数据
让我们使用流读取的文字更加的流畅
 高级流----->创建通过低级流
 
BufferedInputStream/BufferedOutputStream

BufferedReader/BufferedWriter

BuffererInputStream

构建方式 使用低级流 构建

基本使用与低级流的方法完全一致
read() skip() available() close()

BufferedOutputStream
构建方式 使用低级流构建 注意 缓冲流构建的时候没有boolean类型的参数
基本使用与低级流的方法完全一致
write() flish() close()    
BufferedReader
           readLine() -一次读一行
BufferedWriter
           newLine()-换行  


总结

        InputStream      OutputStream
             Reader          Writer
文件流 
         低级 
             字节型 FileInputStream FileOutPutStream
             字符型 FileReader FileWriter
         *缓冲 
             字节型 BufferedInputStream BufferedOutputStream
             字符型 BufferedReader  BufferedWriter   
数组流
        byte数组      ByteArrayInputStream  ByteArrayOutputStream
        char数组      CharArrayReader    CharArrayWriter
字符串流
         StringReader    StringWriter     
数据流
        DataInputStream      DataOutPutStream
*对象流-将对象直接存入文件中
   
        ObjectInputStream      ObjectOutputStream    
        对象的序列化/反序列化
        对象的序列化指的是:将一个完整的对象拆分成字节碎片 记录在文件中
                 反序列化:将文件中记录的对象 反过来组合成一个完整的对象
          如果要将对象序列化到文件中
                   需要让对象实现Serializable接口(示意性接口)
          如果要将对象反序列化 
                   需要给对象提供一个序列化的版本号
                     private long serialVersionUID=任意l;(也可以不写)

posted @ 2020-10-18 19:10  Zh'Blog  阅读(70)  评论(0编辑  收藏  举报