目录
一、什么是IO流
IO流用于处理设备之间的数据传输
输入:将外部数据读入程序(内存)中
输出:将程序数据输出到磁盘、光盘等存储设备中
过程:硬盘—>内存—>硬盘
二、IO流的分类
1、流的方向:输入流、输出流
2、操作数据单位:字节流、字符流
3、流的功能:节点流、处理流
三、字节流和字符流
1、字符流
类名以“Reader\Write”结尾为字符流,一次读取一个字符。
只能读取纯文本文件.txt、 .java、.ini、.py(能用记事本打开的的文件)
eg.新建一个1.txt文件,内容为:a你今天吃饭没
如果用字符流的方式读取1.txt
第一次读取,一个字符‘a’
第二次读取,体格字符‘你’
2、字节流
类名以“Stream”结尾为字节流,一次读取一个字节。
采用字节流读取文本文件时,可能不会显示完整字符,因为中文字符占多个字节。
如果用字节流的方式读取1.txt
第一次读取,一个字节,读到a(字母 'a' 占一个byte)
第二次读取,读到'你'的一般
第三次读才能读到‘你’的另一半(汉字 '你' 占两个byte)
大致步骤
1、确定源(确定要操作的文件,相当于水井)
2、打开流(相当于一个管道,连接硬盘和内存)
3、操作流
4、关闭流(用完一定记得关闭,防止占用资源)
流的开关原则:先开后关,后开先关。
package csdn.IO;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class ex1 {
public static void main(String[] args){
String come="C:\\Users\\86181\\Desktop\\1.txt";//确定源
FileInputStream fis=null;
try {
fis=new FileInputStream(come);
//打开流
int i= 0;
try {
i = fis.read();
//操作流,读取一个byte
} catch (IOException e) {
e.printStackTrace();
}
System.out.println((char)i);
//强制转换
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally {
try {
fis.close();
//关闭流
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
利用IO流进行复制
将C盘中HelloWorld.txt复制到D盘中
输出流在最终输出之后,一定要记得flush()刷新一下。
package csdn.IO;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import static com.sun.deploy.perf.DeployPerfUtil.write;
public class ex1 {
//public static void copy{String src,Sting dest,int cap}
//方法
public static void main(String[] args) {
String come = "C:\\Users\\86181\\Desktop\\HelloWorld.txt";
String go="D:/copy.txt";
FileInputStream fis=null;//直接操作数据写的流类
FileOutputStream fos=null;
try {
fis=new FileInputStream(come);
fos=new FileOutputStream(go);
byte[] bytes=new byte[4];
while(fis.read(bytes)!=-1){
fos.write(bytes);
fos.flush();
//输出一定要刷新
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try{
if(null!=fos)
//防止空指针异常
fos.close();
}catch (IOException e){
e.printStackTrace();
}
try{
if(null!=fis)
//尽量把null放前面
fis.close();
}catch (IOException e){
e.printStackTrace();
}
//先开后关
}
}
}