Java中的I/O流及利用I/O流实现文件复制功能
来源:互联网 发布:mac任务栏图标太多 编辑:程序博客网 时间:2024/05/18 09:19
Java中的I/O流及利用I/O流实现文件复制功能
一、I/O流的概念
1、 什么是I/O?
硬件层面:I/O(input/output),即输入/输出。每个设备都会有一个专用的I/O地址,用来处理自己设备的输入输出信息。比如电脑设备输入端口为键盘和鼠标,输出端口为显示屏。
软件层面:I/O即不同存储机制上的数据的读入写出。比如内存读写硬盘中的数据或者U盘中的数据。
2、什么是I/O流?
流是指一定的介质按照一定的方向流动的行为,在软件开发中指的是存储的数据的流动过程,这个数据源可以是硬盘中的文件、内存或者是网络中的某个URL
I/O流专门用于软件开发层面的理解,把数据从一个存储介质写出(output)或者读取(input)到另外一个存储介质的过程表示为I/O流的模型
二、流的分类
1、根据传输数据的类型分类
字节流:读取和写入数据的时候,以字节为最小单元进行读取和写入操作
字符流:读取和写入数据的时候,以字符为最小单元进行读取和写入操作,因为每个字符根据编码不同,所占用的字节个数不同,每次读取和写入字符时候,是不定长的字节个数写入读取。
拓展:字符编码即计算机通过二进制表示不同国家字符的方式
常用编码类型:UTF-8、GBK、ISO8859-1等
处理中文的编码类型utf-8占3个字节、GBK占2个字节
关于Java中的编码可以参看我的这篇博客(Java中的编码问题)
2、根据传输数据的方向分类
输入流:把数据从其他存储机制读入到当前内存机制当中
输出流:把内存当中的数据写出到其他存储机制当中
输入流:把数据从其他存储机制读入到当前内存机制当中
输出流:把内存当中的数据写出到其他存储机制当中
三、Java中的I/O流
1、梳理Java中I/O
首先Java中分为两大类流:一类是字节流,另一类是字符流;
每种大类的流都会对应输入流和输出流;即分别对应字节输入输出流和字符输入输出流;
2、字节输入/输出流
3、字符输入/输出流
4、字节流和字符流相应的方法
字节输入流和字符输入流都有相应的read()方法,可以一个字节/一个字符的读取,也可以利用字节数组/字符数组进行批量读取
相应的
字节输出流和字符输出流也有对应的write()方法,可以一个字节/一个字符的写出,也可以将整个字节数组/字符数组进行批量写出
注意对应好,如果是以一个字节或者一个字符的读取,那么就要一个字节或者一个字符的写出
四、I/O流的应用:文件复制功能
1、使用字节流进行文件复制
源代码:
package com.huaixn.copy;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;public class ByteCopy {public static void main(String[] args) {ByteCopy bc= new ByteCopy();try {bc.copy1();bc.copy2();} catch (Exception e) {e.printStackTrace();}}//单字节的拷贝public void copy1() throws Exception{//首先构建输入流的对象,指定需要读取的文件路径FileInputStream fis = new FileInputStream("C:/Users/Administrator/Desktop/my.doc");//构建文件输出流的对象,即将文件复制在哪里去,后面的true代表每次写入时不清空当前文件内容FileOutputStream fos =new FileOutputStream("C:/Users/Administrator/Desktop/mycopy1.doc",true);//一个字节一个字节的读取文件的内容int value = fis.read();//把读取的一个字节写出while(value!=-1){fos.write(value);fos.flush();value = fis.read();}//读取完毕后关闭流fis.close();fos.close();}//利用字节数组拷贝public void copy2() throws Exception{//首先构建输入流的对象,指定需要读取的文件路径FileInputStream fis = new FileInputStream("C:/Users/Administrator/Desktop/my.doc");//构建文件输出流的对象,即将文件复制在哪里去,后面的true代表每次写入时不清空当前文件内容FileOutputStream fos =new FileOutputStream("C:/Users/Administrator/Desktop/mycopy2.doc",true);//构建字节数组byte [] bytes = new byte[1024];//把读取的字节存入到字节数组中int len=fis.read(bytes);//把读取的字节数组写出,注意一一对应while(len!=-1){/* * 利用第一种写出,查看文件属性可知,复制后的文件大小和原来文件大小不一致 * 原因是当最后一次读取没有1024字节时,也会写出1024个字节 * 所以我们采用第二种写出方式 *///fos.write(bytes);fos.write(bytes, 0, len);fos.flush();len=fis.read(bytes);}//读取完毕后关闭流fis.close();fos.close();}}
2、利用字符流进行文件拷贝
源代码:
package com.huaixn.copy;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;public class CharCopy {public static void main(String[] args) {CharCopy cc = new CharCopy();try {cc.copy1();cc.copy2();} catch (Exception e) {e.printStackTrace();}}public void copy1() throws Exception{//构建字符输入流对象FileReader fr = new FileReader("C:\\Users\\Administrator\\Desktop\\my.txt");//构建字符输出流对象FileWriter fw =new FileWriter("C:\\Users\\Administrator\\Desktop\\mycopy1.txt");//读取单个字符int value=fr.read();//输出单个字符while(value!=-1){fw.write(value);fw.flush();value=fr.read();}fr.close();fw.close();}public void copy2() throws Exception{//构建字符输入流对象FileReader fr = new FileReader("C:\\Users\\Administrator\\Desktop\\my.txt");//构建字符输出流对象FileWriter fw =new FileWriter("C:\\Users\\Administrator\\Desktop\\mycopy2.txt");//构建字符数组char [] chars = new char[1024];//把读取的字符存入字符数组中int len =fr.read(chars);//把字符数组中的数据写出while(len!=-1){fw.write(chars, 0, len);fw.flush();len =fr.read(chars);}//关闭流操作fr.close();fw.close();}}
关于Java中的流,以前也写过一篇,有兴趣的可以点下面的链接查看:
博客:Java中的文件拷贝
在上面的文件复制功能代码中,使用字节流可以对.txt、.doc、.docx等文件类型进行拷贝
但使用字符流拷贝时,.doc以及.docx文件类型拷贝后出现了乱码,至于其中的原因,可能是因为中文编码的问题导致,小伙伴们可以在自己的PC机上尝试读取不同类型的文件;
总结:
1、我初次接触Java中的流时,感觉很复杂,有事输出流,字节流等;其实主要还是对流的分类不够了解;现在就感觉好很多了;
2、说点个人的体验吧,流的分类一定要搞清楚,然后要知道哪些是字节输入输出流,哪些是字符输入输出流;
3、勤加练习也是帮助记忆各种流的名字以及类别的方法,可能刚开始会搞不清楚,在理解好流的分类的基础上多敲几遍代码就能慢慢理解了;
4、共勉!
0 0
- Java中的I/O流及利用I/O流实现文件复制功能
- Java I/O 字节流 文件复制
- java中关于I/O文件流的操作实现文件复制和打印功能
- JAVA--I/O流实现文件的复制
- 通过java i/o流实现文件的读写功能
- java I/O复制文件
- I/O流及文件
- Java中的I/O流
- java中的I/O流
- Java中的I/O流
- Java中的I/O流
- Java中的I/O流
- 使用I/O流实现文件的复制
- 用I/O流复制文件
- I/O复制文件
- Java中的文件I/O
- 文件I/O流
- I/O :文件流
- ioremap映射的问题
- python 高级特性
- hadoop中MapReduce多种join实现实例分析
- CSS3实战开发:手把手教大家折角效果实战开发
- Island Perimeter
- Java中的I/O流及利用I/O流实现文件复制功能
- SET NEWNAME FOR DATABASE TO恢复数据库
- [读书笔记]30 天自制操作系统 day2 汇编语言学习与Makefile入门
- 初入MVP框架
- 如何关闭html页面上的iframe页面
- 开发项目之遇到eayui 中window panel 超过父页面的问题
- iOS 导航栏的那些事儿
- 用过滤器 +Session 会话权限控制详解
- Android 系统自动重启Bug(高通平台)