java 基础知识之I/O流 其二(基本使用)

时间:2023-02-17 16:55:12

基本使用


下面我就根据代码,讲讲流的使用方式和组装

1. 使用输入流读取一个文件的原始写法

try{
File file = new File("dsds.dat"); //备注 :这样的路径是项目文件夹下的根目录

//将文件读入到流中
FileInputStream fis = new FileInputStream(file);

//将文件流加修饰,变成能只读取特定数据的流
InputStreamReader isr= new InputStreamReader(fis);

//读取整型
isr.read();
}
catch (FileNotFoundException fne) {
e.printStackTrace();
} catch (IOException ioe) {
e.printStackTrace();
}finally{
try{
//关闭流
dis.close();
fis.close();
file.close();
}catch(Exception e){
e.printStackTrace();
}
}

感受到装饰者带来的好处了吧。没错,这样可以灵活组合,让我们使用不同方式通讯


2. 当然上面的代码是繁杂,每次使用流都要关闭,下面代码实现三个目的
1) 优化代码
2)使用 jse 7 新的特性 try-with-resources语句,取消掉流关闭的代码
3)统计下读取出多少的字节


int count=0;

//try-with-resources语句
//try的构造实例,流会在退出try 前关闭 ,当然是按一次操作而言
try(InputStreamReader isr=new InputStreamReader (
new FileInputStream(
new File("emplyes.dat")))){

//统计拿到多少的字节并打印到控制台
while(isr.read()!=-1)
count++;

System.out.println(count);

} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

这样的代码就清爽多了

等等,好像忘了什么东西


3. 让我们将输入流和输出流结合起来使用
将一个文件的内容输出到另一个文件

//缓冲,后面讲解
byte [] buf = new byte[1024];
//用于存放所读取字节的长度
int len = 0;

//这里 对于多个资源的创建要使用 ; 作为分隔符
//首先是建立两条通道 文件1 -通道fis- 程序 -通道fos- 文件2
try(FileInputStream fis = new FileInputStream(new le("emplyes.dat")) ;
FileOutputStream fos = new FileOutputStream(new File("emplyes2.dat"))) {

//读取操作
while((len = fis.read(buf))!=-1){
//write 方法(一次读取的字节数,从那个位子开始,在哪个位置结束)
fos.write(buf,0,len);
}

} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

这样一个简单的输入输出流就构建好了。