java高级之文件IO流

1.文件IO

外存  内存   缓存

打开txt文件的步骤:

1.启动一个应用程序[记事本,word,excel],系统会给这个程序分配内存空间

2.在外存和内存之间建立一个管道

3.将外存中的数据通过管道输送到内存中

4.输送数据的管道叫做数据流对象

PS: 1.字节是可以操作的最小的有意义的单位

       2.所有的数据都可以用字节表示


2.字节输入流

InputStream:所有字节输入流的抽象父类

FileInputStream 文件输入流

ByteArrayInputStream 字节数组输入流

ObjectInputStream   对象输入流

FilterInputStream 过滤输入流

BufferedInputStream 缓冲字节输入流

DataInputStream 基本数据类型输入流

FileInputStream 文件字节输入流

构造方法

FileInputStream(File f,String name)

FileInputStream(String parent,String name)

FileInputStream(String name)

常用方法:

int len = available()  获得流中的估计剩余字节数

int t = read(); 读取流中的字节,如果是-1,说明读取到文件末尾

返回值表示读取到的字节数,如果为-1,表示到流的末尾

skip(t);  丢弃到t个字节

int t =read(byte[]) 将流中的数据读入到字节数组中,直到填满整个数组

int t = read(byte[],off,len) 将流中的数据读入到字节数组中,从数组的第off个位置开始填充,读取len个

返回值表示读取到的真实的字节数,如果为-1,表示到流的末尾

3.字节输出流

OutputStream

FileOutputStream 文件输出流

ByteArrayOutputStream 字节数组输出流

ObjectOutputStream 对象输出流

FilterOutputStream 过滤输出流

BufferedOutputStream 缓冲字节输出流

DataOutputStream  基本数据类型输出流

FileOutputStream 文件字节输出流

构造方法

FileOutputStream(String path)

FileOutputStream(File f)

FileOutputStream(String path,boolean append)

FileOutputStream(File f,boolean append)

常用方法:

write(int) 将指定的字节写到输出流

write(byte[]) 将字节数组中的所有字节写到输出流

write(byte[],off,len) 将字节数组中的字节写到输出流,从下标off开始,写len个

flush()  刷新输出流,将流中的字节强制输出

案例:

1.读取文本文件中的数据

2.将内存中的数据写到文件中

3.完成一个文件复制

作业:

1.查询API文档,找出字符串类中  关于字节数组,字符数组,字符串三者的相互转换的操作

2.定义一个方法完成文件的复制

public void copy(String src,String dest){}

3.给定一个文件,将文件中的所有字节+1,重新写到硬盘中,变成一个新的文件【简单的文件加密】

-----------------------------------------

4.字符集编码

ISO8859系列 : 西欧字符集   用来表示半角字符,不能处理中文

A B c d 2 3

ab C  D2 3

GBK/GB2312/GB18030 : 简体中文

BIG5   : 繁体中文

UTF-8 : 基于Unicode编码的字符集

ANSI

------------------------------------------------------------

5.缓冲流的使用:

只能对基本的数据流进行包装

BufferedInputStream bis = new BufferedInputStream(inputstream);

BufferedOutputStream bos = new BufferedOutpuStream(outputstream);

基本数据类型的数据流(可以直接操作基本数据类型)

DataInputStream

DataOutputStream

案例:有一个学生对象,将学生对象的数据保存到文件中

------------

作业:

1.查API文档,学习使用Object流

    使用对象流来对学生对象进行写和读操作

2.使用ArrayList保存若干个学生对象,将数据保存到文件中,并可以正确的读取出来

-----------------------------------------------------------

6.对象的序列化和反序列化

序列化:对象本身是不能够在流中串行的,将对象转换成可串行的,有序的数据流

反序列化:将串行的有序的流数据转换成对象的形式

7.如何实现序列化和反序列化?

如果某一个类的对象需要序列化或反序列化,就需要让该类实现序列化Serializable接口

序列化接口不做任何操作,仅仅是给该类的对象添加一个可序列化标记


8.文件协议

txt

doc

bmp

rar

---------------------------------------------------

9.其他流

字节数组输入流

ByteArrayInputStream

字节数组输出流

ByteArrayOutputStream

=============================================================

字符输入流

Reader

 InputStreamReader 字节输入流到字符输入流的转换流

  FileReader 文件字符流

 BufferedReader   缓冲字符流

字符输出流

Writer

  OutputStreamWriter

FileWriter

  BufferedWriter

----------------------------------------------------------

1.使用字符流完成文本文件的复制

2.如果不是文本文件,能否用字符流来复制???

3.完成文件夹的复制[字节流]

4.解压jdk中的src.zip    [用字符流]

    统计src中有多少个java文件

    统计一共有多少行Java代码

    统计src文件夹的总大小

5.[扩展]解析BMP格式的图片

==============================================

10.NIO  

FileChannel

ByteBuffer

//创建文件字节流

FileInputStream fis = new FileInputStream(src);

FileOutputStream fos = new FileOutputStream(dest, true);

//获得输入和输出管道

FileChannel inChannel = fis.getChannel();

FileChannel outChannel = fos.getChannel();



outChannel.transferFrom(inChannel, 0, f.length());

inChannel.transferTo(0, f.length(), outChannel);



ByteBuffer buffer = ByteBuffer.wrap("中南大".getBytes());

outChannel.write(buffer);

=================================

11.文件路径

绝对路径:从根磁盘开始计算的路径

windows:  D:\\aa\\bb\\cc\\dd.txt

Linux:    /aa/bb/cc/dd.txt

http://www.qq.com/aa/bb/cc.css

相对路径:

 A:   D:\\aa\\a.txt

B:   D:\\aa\\bb\\cc\\c.txt



A相对于B的路径:  ..\\..\\a.txt

B相对于A的路径:  bb\\cc\\c.txt

--------------------------------------------------------

扩展:

1.字节流和字符流的区别,以及各自的使用场景

2.InputStream中 read()方法的返回值表示什么意思?

  read(byte[] s)方法的参数表示什么意思?返回值表示什么意思?

  read(byte[] s,int t,ine len) 三个参数的意思?返回值是什么意思?

3.outputStream中 write(int t)方法的参数表示什么意思?  write(byte[] s)方法的参数表示什么意思? write(byte[] s,int t,ine len) 三个     参数的意思?

4.写出常用的字节流和字符流有哪些?各自的继承体系?

5.使用文件管道FileChannel的好处有哪些?

6.使用FileInputStream/FileOutPUtStream实现文件复制             

    使用FileInputStream/FileOutPUtStream+自定义缓冲区实现文件复制           

    使用缓冲字节流实现文件复制     

    使用缓冲字节流+自定义缓冲区实现文件复制     

7.使用字符流用第6题的方式复制文件

8.文件夹的复制一定要会写

9.统计文件夹中的各种数据

  文件个数,文件夹个数  文件大小  总行数    标志性的数据[XXX的行数,jpg文件个数]

发布了52 篇原创文章 · 获赞 38 · 访问量 2505

猜你喜欢

转载自blog.csdn.net/weixin_44364444/article/details/104019602