• 1

  • 1

  • 收藏

Java常用工具——IO流

4个月前

异常

什么是异常

即非正常情况,通俗地说,异常就是程序出现的错误。

异常的分类

  • 顶层父类: Throwable
  • 子类: Error(错误,不需要我们处理)
  • 子类: Exception(异常, 这个才是我们常说的异常)

异常( Exception )

合理的应用程序可能需要捕获的问题; 举例: NullPointerException

错误( Error )

合理的应用程序不应该试图捕获的问题; 举例: StackOverFlowError

异常的处理方式

JVM默认的异常处理方式

在控制台打印错误信息,并终止程序。

开发中异常的处理方式

  • try..catch ( finally) : 捕获,自己处理;
try {
//尝试执行的代码
} catch(Exception e) {
//出现可能的异常之后的处理代码
} finally {
// 正常情况下一定会执行的代码,如关闭资源
}
复制代码

特点:处理完异常,程序会继续执行。
执行流程: 先执行try{}中的内容,看是否有问题(异常);
没有:直接执行finally语句中的内容;
有:跳转到catch0 ()语句中开始执行,再执行finally{)} 语句中的内容.

  • throws :抛出,交给调用者处理。
public void方法名0 throws Exceptoin {
}
复制代码

特点: 执行结束后,程序不在执行。

IO流

什么是IO流

I/O ,即输入( Input )输出( Output) , IO流指的是数据像 连绵的流体一样进行传输。

IO流能干什么?

在本地磁盘和网络上操作数据。

IO流的分类

按数据流向分:

  • 输入流;
  • 输出流。

按操作方式分:

  • 字节流:

InputStream
OutputStream

  • 字符流:

Reader
Writer

IO流体系

字符流:

按字符读写数据的IO流

Reader  字符输入流的顶层抽象类
——FileReader 普通的字符输入流
——BufferedReader 高效的字符输入流(也叫:字符缓冲输入流)
Writer  字符输出流的顶层抽象类
——FileWriter 普通的字符输入流
——BufferedWriter 高效的字符输入流(也叫:字符缓冲输入流)
复制代码

字节流:

按字节读写数据的IO流

InputStream 字节输入流的顶层抽象类
	FileInputStream 普通的字节输入流
	BufferedInputStream 高效字节输入流
OutputStream 字节输出流的顶层抽象类
	FileOutputStream 普通的字节输出流
	BufferedOutputStream 高效的字节输出流
复制代码

File类

概念

文件,文件夹,一个File对象代表磁盘上的某个文件或文件夹

构造方法:

File(String pathname)  根据字符串形式的路径获取File对象.
File(String parent, String child) 根据字符串形式的父目录以及子目录创建File对象.
File(File parent, String child) 根据父目录对象,以及字符串形式的子目录来获取File对象.
复制代码

成员方法:

创建功能: 如果不存在就创建,返回true,否则就不创建,返回false.
createNewFile():创建文件
mkdir()和mkdirs()∶创建单级目录和多级目录

判断功能
isDirectory():判断File对象是否为目录
isFile():判断File对象是否为文件
exists():判断File对象是否存在

获取方法
getAbsolutePath()∶获取绝对路径
	绝对路径:以盘符开头的路径.例如:D:/1.txt
getPath()∶获取文件的相对路径
	相对路径:—般是相对于当前项目路径来讲的.例如: 1.txt
getName()∶获取文件名
list()∶获取指定目录下所有文件(夹)名称数组
listFiles():获取指定目录下所有文件(夹)File数组

复制代码

字符流读写文件

字符流读数据–按单个字符读取

  • 创建字符流读文件对象:

Reader reader = new FileReader("readme.txt") ;

  • 调用方法读取数据:

int data = reader.read() ;
读取一个字符,返回该字符代表的整数,若到达流的末尾,返回-1。

  • 异常处理:

throws IOException

  • 关闭资源:

reader.close();

字符流读数据-按字符数组读取

  • 创建字符流读文件对象∶

Reader reader = new FileReader("readme.txt")

  • 调用方法读取数据∶

char[] chs = new char[2048];int len = r.read(chs) ; 读取字符到数组中,返回读取的字符数,若到达流的末尾,返回-1

  • 异常处理:

throws IOException

  • 关闭资源∶

reader.close();

字符流写数据–按单个字符写入

  • 创建字符流写文件对象∶

Writer writer = new FileWriter("dest.txt") ;

  • 调用方法写入数据︰

int x =’中’;writer. write(x);写一个字符

  • 异常处理:

throws IOException

  • 关闭资源︰

writer.close();

字符流写数据―按字符数组写入

  • 创建字符流写文件对象∶

Writer writer = new FileWriter("dest.txt") ;

  • 调用方法写入数据∶

char[] chs = {橙’,’心',’橙’,’意’};writer.write(chs); 写一个字符数组

  • 异常处理:

throws IOException

  • 关闭资源:

writer.close();

字符流写数据-按字符串写入

  • 创建字符流写文件对象∶

Writer writer = new FileWriter("dest.txt");

  • 调用方法写入数据∶

writer. write("小黑爱学习");写一个字符串

  • 异常处理:

throws IOException

  • 关闭资源:

writer.close();

字符流拷贝文件

按单个字符读写

  • 创建字符流读文件对象∶

Reader reader = new FileReader("readme.txt")

  • 创建字符流写文件对象︰

Writer writer = new FileWriter("dest.txt");

  • 调用方法读取数据︰

int data = reader.read() :

  • 调用方法写入数据︰

writer. write(data) ;

  • 异常处理:

throws IOException

  • 关闭资源︰

reader.close(); writer.close();

创建字符流读文件对象∶

Reader reader = new FileReader("readme.txt") ;
创建字符流写文件对象∶
Writer writer = new FileWriter("dest.txt") ;
调用方法读取数据:
char[] chs = new char[2048];int len = reader.read(chs);
调用方法写入数据:
writer. write(chs,0,len) ;
异常处理:
throws IOException
关闭资源:
reader.close();writer.close();
复制代码

字符缓冲流拷贝文件的标准代码

创建字符流读文件对象∶
BufferedReader br = new BufferedReader(
new FileReader("readme.txt"));
创建字符流写文件对象∶
BufferedWriter bw = new BufferedWriter(
new FileWriter("dest.txt"));
异常处理:
throws IOException
使用while循环读写数据:
int len;
while((len = br.read()) != -1) {
bw.write(len) ;
}
关闭资源:
br.close() ;bw.close() ;
复制代码

字符缓冲流用法:

分类:
BufferedReader:字符缓冲输入流(也叫高效字符输入流)
	成员方法:
	public String readLine();一次读取一行数据并返回读取到的内容,读不到返回null
BufferedWriter:字符缓冲输出流(也叫高效字符输出流)
	成员方法:
	public void newLine () ;根据当前操作系统给出对应的换行符.
特点:
字符缓冲流自带有缓冲区,大小为8192个字符,也就是16KB.
复制代码
//需求:通过字符缓冲流"一次读写一行"的方式,将1.txt文件中的内容拷贝到2.txt文件中.//1.创建字符缓冲输入流对象,关联数据源文件.
//合并版
BufferedReader br = new BufferedReader(new FileReader("lib/1.txt") );
//2.创建字符缓冲输出流对象,关联目的地文件.
BufferedWriter bw = new BufferedWriter(new FileWriter("lib/2.txt") );
//3.定义变量,记录读取到的内容.
String str ;
//4.循环读取,只要条件满足就一直读,并将读取到的内容赋值给变量.
while((str = br.readLine)) != null){
	//5.将读取到的内容写入到目的地文件中.
	bw.write(str) ;
	//千万注意一个小细节,你特别容易忽略
	//千万别忘记换行
    bw.newLine();
}
//6.释放资源.br.close() ;
bw.close() ;


特点:
字符缓冲流自带有缓冲区,大小为8192个字符,也就是16KB.
注意:
字符流只能拷贝纯文本文件.
复制代码

字节流读写文件

字节流拷贝文件―按单个字节读写

创建字节流读文件对象∶
InputStream is = new FileInputStream("Desktop.jpg");
创建字节流写文件对象∶
OutputStream os = new FileOutputStream(
"D: \l博学谷桌面.jpg") ;
异常处理:
throws IOException
使用while循环读写数据:
int b;
while((b = is.read()) != -1) {
	os.write(b);
}
关闭资源:
is.close() ;
os.close( ;

复制代码

字节流拷贝文件―按字节数组读写

创建字节流读文件对象:
InputStream is = new FileInputStream("Desktop. jpg");
创建字节流写文件对象∶
OutputStream os = new FileOutputStream(
"D: \l博学谷桌面.jpg") ;

异常处理:
throws IOException
定义字节数组,每次读取2048个字节:
byte[] b = new byte[2048];
使用while循环读写数据︰
int len;
while((len = is.read(b)) != -1) {
	os. write(b,0,len) ;
}
关闭资源;
is.close() ;
os.close() ;
复制代码

字节缓冲流拷贝文件的标准代码

创建字节缓冲流读文件对象∶
BufferedInputStream bis = new BufferedInputStream(
new FileInputStream("a. jpg"));
创建字节缓冲流写文件对象:
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(
"b.jpg"));
异常处理:
throws IOException
使用while循环读写数据︰
int len;
while((len = bis.read()) != -1) {
	bos.write(len) ;
}
关闭资源:
bis.close() ;
bos.close();
复制代码
免责声明:文章版权归原作者所有,其内容与观点不代表Unitimes立场,亦不构成任何投资意见或建议。

java

1

相关文章推荐

未登录头像

暂无评论