java io 输入输出流_输入输出--Java IO流

一.IO概述

http://1.IO概述:Java IO即Java 输入输出系统。

1)不管我们编写何种应用,都难免和各种输入输出相关的媒介打交道,其实和媒介进行IO的过程是十分复杂的,这要考虑的因素特别多。

2)比如我们要考虑和哪种媒介进行IO(文件、控制台、网络等等),我们还要考虑具体和它们的通信方式(顺序、随机、二进制、按字符、按字、按行等等)。

3)Java类库的设计者通过设计大量的类来攻克这些难题,这些类就位于http://java.io包中。

4)在JDK1.4之后,为了提高Java IO的效率,Java又提供了一套新的IO,Java New IO简称Java NIO。 它在标准java代码中提供了高速的面向块的IO操作。

2.流

1)流从概念上来说是一个连续的数据流。

在JAVA中把不同的输入/输出源(键盘、文件、网络等)抽象表述为“流”。

2)输入流

(1)字节输入流

InputStream

(2)字符输入流

Reader

3)输出流

(1)字节输出流

OutputStream

(2)字符输出流

Writer

4)在Java中,Reader和Writer是http://java.io包中所有字符流API类的基类。

5)字节流是通用的,字符流是基于字节流的。

3.Java的IO包主要关注的是从原始数据源的读取以及输出原始数据到目标媒介。以下是最典型的数据源和目标媒介:

1.文件

2.管道

3.网络连接

4.内存缓存

5.System.in, System.out, System.error(注:Java标准输入、输出、错误输出)

4.文件

概念:通过右键查看属性,发现只要确定了文件名和文件路径,就可以确定到一个具体的文件。

二.File类

1.java IO中要操作文件是由File类来进行操作。

而文件路径可能是由大量文件夹构成,所以在File类中会存在针对文件夹的操作。

2.File类型对象创建的三种方式

1)File f1 = new File(相对路径/绝对路径);

2)File f2 = new File(父路径,子路径/文件名);

3)File f3 = new File(File类型对象,子路径/文件名);

3.创建功能

1)创建文件夹

mkdir 创建单个文件夹

mkdirs 创建多级文件夹

2)创建文件

createNewFile 创建新文件

createTempFile 在系统默认临时路径下创建文件

3)注意事项:若创建文件或者文件夹忘了写盘符路径,那么默认在项目路径下

4.获取功能

1)文件及文件夹的查询

(1)查询路径时,不带条件筛选

List

ListFiles

(2)查询路径时,查询筛选后的路径

List(FilenameFilter)

accept方法,用来设置筛选条件

两个参数传入自己使用

参数

参数1

父路径

参数2

子路径

返回值

true

条件验证成功

false

条件验证失败

List(FileFilter)

accept方法,用来设置筛选条件

只有一个参数

File类型

包含父类路径和要查找的子类路径

返回值

true

条件验证成功

false

条件执行不成功

不会将参数的路径添加到返回值的数组中

List(FilenameFilter)和List(FileFilter)的区别

传入的参数不一样

2)注意:FilenameFilter实现类中的accept(File file,String name)中两个参数,第一个参数为File对象可以表示为一个路径,第二个参数为该路径下的文件名

3)注意:FileFilter实现类中的accept(File file)只有一个参数,该参数指代的是一个文件的路径,和FilenameFilter中的区别在于,FilenameFilter中两个参数合在一起才能指定一个文件,而FileFilter则没有将路径和文件名分开,通过观察两个接口的名称也能看出二者的区别

5.判断功能

在IO的所有操作中,大家可以发现针对文件和文件夹的操作是不一样的,最明显的是API都不同

boolean exists()

判断路径表示的文件或者文件夹是否存在

boolean isDirectory()

判断当前是否是一个文件夹

boolean isFile()

判断当前是否是一个文件

6.删除功能

删除

delete方法

文件夹

删除文件夹,当文件夹中包含有其他文件夹或者是文件的时候,不能直接删除的

文件

直接删除

三.IO概述

1.Java流概念:在JAVA中把不同的输入/输出源(键盘、文件、网络等)抽象表述为“流”。

1)按流的方向

输入流

输出流

2)按处理数据单位

字符流:一次读或写8位二进制。字节流关于输入和输出的基类有两个。

Reader

Writer

字节流:一次读或写16位二进制。字符流关于输入和输出的基类有两个。

Input Stream

Output Stream

3)按角色

节点流:

低级流,直接读取文件数据处理流

高级流

也是处理文件数据,但是是从节点流中来的

不会直接接触文件数据 包装流

四.访问文件

1. 读取文件数据

1)字节流

(1)字节输入流【FileInputStream】

(2)实现步骤:

1.关联实体文件,创建FileInputStream对象

2.调用read方法

3.关闭输入流【close】

(3)API:

1.字节输入流对象,使用构造函数:

FileInputStream(File file)

返回一个字节输入流对象,该对象使用字节流读取文件,参数为File类型关联实体文件

FileInputStream(String name)

返回一个字节输入流对象,传入的name为路径+文件名

2.使用字节输入流对象读取文件:

字节输入流对象在读取到最终的数据结尾时,返回-1

int read()

单字节读取文件,返回读取的下一次的数据字节数,若下一次读取没有数据则返回为-1

int read(byte[] b)

多字节读取文件,读取指定数组长度的数据字节,若下一次读取没有数据则返回为-1

多字节读取时,使用byte类型的数组作为缓冲区,可能会存在数据重复问题

int read(byte[] b,int off,int len)

多字节读取文件,读取指定数组长度的数据字节,若下一次读取没有数据则返回为-1

参数2和参数3是针对数组缓冲区进行的设置

参数off:从缓冲区数组第几个下标开始读取

参数len:从缓冲区数组中读取指定长度的数据

注意:参数2和参数3相加的值不能大于等于数组的长度,否则会引发下标异常

3.关闭输入流对象

void close()

关闭输入流对象

2)字符流

(1)字符输入流【FileReader】

(2)字符输入流读取文件的实现步骤:

1.关联实体文件,创建FileReader对象

2.调用read方法

3.关闭输入流【close】

(3)API

1.字符输入流对象,使用构造函数:

FileReader(File file)

返回一个字符输入流对象,该对象使用字符流读取文件,参数为File类型关联实体文件

FileReader(String name)

返回一个字符输入流对象,传入的name为路径+文件名

2.使用字符输入流对象读取文件:

字符输入流对象在读取到最终的数据结尾时,返回-1

int read()

单字符读取文件,返回读取的下一次的数据字符数,若下一次读取没有数据则返回为-1

int read(char[] c)

多字符读取文件,读取指定数组长度的数据字符,若下一次读取没有数据则返回为-1

多字符读取时,使用byte类型的数组作为缓冲区,可能会存在数据重复问题

int read(char[] c,int off,int len)

多字符读取文件,读取指定数组长度的数据字符,若下一次读取没有数据则返回为-1

参数2和参数3是针对数组缓冲区进行的设置

参数off:从缓冲区数组第几个下标开始读取

参数len:从缓冲区数组中读取指定长度的数据

注意:参数2和参数3相加的值不能大于等于数组的长度,否则会引发下标异常

3.关闭输入流对象

void close()

关闭输入流对象

2. 写入文件数据

1)字节流

(1)字节输出流【FileOutpuStream】

(2)字节流输出数据的代码实现步骤:

1.关联实体文件,创建输出流对象

2.调用write方法

3.关闭输出流

(3)API

1.字节输出流对象,构造函数:

FileOutputStream(File file)

返回一个字节输出流对象,参数为File类型关联实体文件

FileOutputStream(String name)

返回一个字节输出流对象,参数为String类型,取值为路径+文件名

向文件中设置是否追加数据:

FileOutputStream(File file, boolean append)

返回一个字节输出流对象,参数1File类型关联实体文件,参数2布尔值true代表追加

FileOutputStream(String name, boolean append)

返回一个字节输出流对象,参数1String类型关联实体文件,参数2布尔值true代表追加

2.字节输出流对象输出数据到指定文件:

注意:

如果输出的路径不存在会抛出异常,如果输出的路径存在而文件不存在则会创建新的文件

如果不需要对输出的文件进行追加效果,那么需要在创建输出流对象的时候添加布尔值

void write(int b)

将指定字节写入文件输出流中

void write(byte[] b)

将指定的byte数组中的数据写入到文件

void write(byte[] b,int off,int len)

将指定byte数组中的数据指定起始位置和长度的数据输出到文件中

3.关闭字节输出流对象:

void close()

关闭文件输出流

2)字符流

(1)字符输出流【FileWriter】

(2)字符流输出数据的代码实现步骤:

1.关联实体文件,创建输出流对象

2.调用write方法

3.关闭输出流

(3)API

1.字符输出流对象,构造函数:

FileWriter(File file)

返回一个字符输出流对象,参数为File类型关联实体文件

FileWriter(String name)

返回一个字符输出流对象,参数为String类型,取值为路径+文件名

向文件中设置是否追加数据:

FileWriter(File file, boolean append)

返回一个字符输出流对象,参数1File类型关联实体文件,参数2布尔值true代表追加

FileWriter(String name, boolean append)

返回一个字符输出流对象,参数1String类型关联实体文件,参数2布尔值true代表追加

2.字符输出流对象输出数据到指定文件:

注意:

如果输出的路径不存在会抛出异常,如果输出的路径存在而文件不存在则会创建新的文件

如果不需要对输出的文件进行追加效果,那么需要在创建输出流对象的时候添加布尔值

void write(int b)

将指定字符写入文件输出流中

void write(char[] c)

将指定的char数组中的数据写入到文件

void write(char[] c,int off,int len)

将指定char数组中的数据指定起始位置和长度的数据输出到文件中

void write(String str)

将字符串输出到指定的文件中

void write(String str,int off,int len)

指定字符串的起始位置和长度,输出到指定的文件中

3.关闭字节输出流对象:

void close()

关闭文件输出流

五.转换流

1.字节流转字符流InputStreamReader

字节流转成字符流的步骤:

1.准备一个字节流

2.将字节流转成字符流输出

3.关闭流

2.字符流转字节流OutputStreamWriter

字符流转字节流步骤:

1.准备一个字符流

2.将字符流转换为字节流

3.关闭流

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值