java学习day22

一  IO流

(1)分类
字节流:
输入流:

InputStream

方法:

int read()
int read(byte[] bys)
FileInputStream
BufferedInputStream
输出流:
OutputStream

方法:

write(int by)

write(byte[] bys,int index,int len)
FileOutputStream
BufferedOutputStream

字符流:
输入流:
Reader

方法:

int read()

int read(char[] chs)
FileReader

BufferedReader

方法:

String readLine()
输出流:

Writer

方法:

write(int ch)
write(char[] chs,int index,int len)
FileWriter

BufferedWriter

方法:

write(String line)
void newLine()
(2)复制文本文件:
9种方式:
字节流:
4种
基本流每次操作一个字节
基本流每次操作一个字节数组
高效流每次操作一个字节
高效流每次操作一个字节数组(★)
字符流:
5种
基本流每次操作一个字符
基本流每次操作一个字符数组
高效流每次操作一个字符
高效流每次操作一个字符数组(★)
高效流每次操作一行文本(★)


代码体现:
数据源:c:\\a.jpg
目的地:d:\\b.jpg

思路:
1. 创建缓冲字符输入流对象(建立于文件系统中文件的对应关系)
2. 创建缓冲字符输出流对象(建立于文件系统中文件的对应关系)
3. 使用输入流对象的read方法,读出源文件中内容(显示/其他操作)
4. 使用输出流对象的write方法,写入数据到目的地文件(需要刷新)
5. 关闭流,释放资源
代码体现:
//创建对象
BufferedReader br = null;
BufferedWriter bw = null;
try{
//实例化对象
br = new BufferedReader(new FileReader("a.txt"));
bw = new BufferedWriter(new FileWriter("b.txt"));


//读取内容
String len = null;
while((len = br.readLine())!= null){
//写入数据
bw.write(len);
bw.newLine();
bw.flush();
}
}catch(Exception e){
e.printStackTrace();
}finally{
if(br != null){
try{
br.close();
}catch(Exception e){
e.printStackTrace();
}
}
if(bw !=  null){
try{
bw.close();
}catch(Exception e){
e.printStackTrace();
}
}


}


(3)复制二进制流数据:(图片,视频,音频等)
字节流:
4种
基本流每次操作一个字节
基本流每次操作一个字节数组
高效流每次操作一个字节
高效流每次操作一个字节数组(★)


代码体现:
数据源:c:\\a.jpg
目的地:d:\\b.jpg


思路:
1. 创建缓冲字节输入流对象(建立于文件系统中文件的对应关系)
2. 创建缓冲字节输出流对象(建立于文件系统中文件的对应关系)
3. 使用输入流对象的read方法,读出源文件中内容(显示/其他操作)
4. 使用输出流对象的write方法,写入数据到目的地文件(需要刷新)
5. 关闭流,释放资源

//创建对象
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try{
//实例化对象
bis = new BufferedInputStream(new FileInputStream("c:\\a.jpg"));
bos = new BufferedOutputStream(new FileOutputStream("d:\\b.jpg"));

//读取
byte[] bys = new byte[1024];
int len = 0;
while((len = bis.read(bys))!= -1){
//写入数据
bos.write(bys,0,len);
}
}catch(IOException e){
e.printStackTrace();
}fianlly{
if(bis != null){
try{
bis.close();
}catch(Exception e){
e.printStackTrace();
}
}
if(bos !=  null){
try{
bos.close();
}catch(Exception e){
e.printStackTrace();
}
}

}

二  转换流

(1)如果有字节流对象,为了使用字符流的功能,就必须使用转换流进行操作。
(2)案例:
键盘录入数据


BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  字节转字符
BufferddWriter bw = new BufferedWriter(new FileWriter("a.txt"));


String line = null
while((line=br.readLine())!=null)
{
if("over".equals(line))
{
break;
}


bw.write(line);
bw.newLine();
bw.flush();
}


bw.close();
br.close();


把文本文件的数据通过流对象在控制台显示


BufferedReader br = new BufferedReader(new FileReader("a.txt"));
BufferddWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); 字符转字节


String line = null
while((line=br.readLine())!=null)
{
bw.write(line);
bw.newLine();
bw.flush();
}


bw.close();
br.close();


三  打印流

(1)打印流是写数据的。
(2)特点:
A:可以写任意数据类型的数据
B:如果启动了自动刷新,能自动刷新,还会换行。println()
C:可以直接往文件写数据
注意:哪些流对象可以直接读写文件?
看构造方法,如果同时有String和File的构造参数,那么该流对象就可以读写文件。
(3)用打印流改进复制文本文件的操作
数据源:
c:\\a.txt
目的地:
d:\\b.txt


BufferedReader br = new BufferedReader(new FileReader("c:\\a.txt"));
PrintWriter pw = new PrintWriter(new FileWriter("d:\\b.txt"),true);


String line = null;
while((line=br.readLine())!=null)
{
pw.println(line);
}


pw.close();
br.close();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值