一、字节高级流(处理流)
1.1 字节高级流的分类
过滤流(*)
缓冲流 BufferInputStream BufferOutPutStream
缓冲流主要功能是:为低级流在读写时,提供一种缓冲能力(靠内存)
数据流 DataInputStream DataOutPutStream
数据流主要功能是:允许我们使用一种与计算机无关的格式去读写数据
打印输出流 PrintStream
对象流(*)
合并流(了解)
SequenceInputStream类可以实现两个文件的合并操作,从两个低级流中读取数据字节,当到达流的末尾时从一个流转到另一个流 ,从而实现合并操作
1.2 字节输入缓冲流的使用
package com.woniuxy.java18.study.advance;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
/**
* 字节输入缓冲流
* @author Administrator
*
*/
public class BufferInputStreamStudy {
public static void main(String[] args) {
// TODO Auto-generated method stub
//定义一个文件对象
String path = "D:\\movie\\japan\\dj\\bdy.txt";
File file = new File(path);
//定义缓冲输入流的变量
BufferedInputStream bis = null;
FileInputStream in = null;
try {
//定义文件输入流,并将其进行Buffer包装
in = new FileInputStream(file);
bis = new BufferedInputStream(in);
byte[] data = new byte[1024];
//读取数据
while(bis.read(data) != -1) {
//将接收到的内容,输出到控制台
System.out.println(new String(data,"utf-8"));
}
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {
//关闭流
try {
bis.close();
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
1.3 字节输出缓冲流的使用
package com.woniuxy.java18.study.advance;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* 字节输出缓冲流
* @author Administrator
*
*/
public class BufferOutputStreamStudy {
public static void main(String[] args) {
// TODO Auto-generated method stub
//定义文件对象
String path = "D:\\movie\\japan\\dj\\cxk.txt";
File file = new File(path);
BufferedOutputStream bos = null;
FileOutputStream fos = null;
try {
if(!file.exists()) {
file.createNewFile();
}
//实例化流
fos = new FileOutputStream(file);
bos = new BufferedOutputStream(fos);
//向文件写入内容
String str = "它不是拍电影的,它是个运动员!!!!!!!";
byte[] data = str.getBytes();
//写
bos.write(data);
//刷新(清空)缓冲流-->低级流
bos.flush();
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {
//关闭流
try {
bos.close();
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
1.4 数据流 DataInputStream DataOutputStream
这2个流,主要数据流,它的作用:可以让我们采用 与计算机无法的方式来完成对文件进行读写
与计算机无法的方式:采用Java的数据类型(String,基本数据类型)进行文件内容操作
package com.woniuxy.java18.study.advance;
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Arrays;
/**
* 数据输入流(高级流)
* 特点:允许代码使用一种与计算机无法的格式来进行内容输出
* @author Administrator
*
*/
public class DataInputStreamStudy {
public static void main(String[] args) {
// TODO Auto-generated method stub
File file = new File("D:\\94b69bb9-ea80-4a08-ade9-48a1a0bcbaf8.txt");
DataInputStream dis = null;
FileInputStream fis = null;
BufferedInputStream bis = null;
User[] users = new User[2];
int index = 0;
try {
fis = new FileInputStream(file);
bis = new BufferedInputStream(fis);
//不考虑缓冲流,就直接使用文件输入流
// dis = new DataInputStream(fis);
dis = new DataInputStream(bis);
//操作流
while(true) {
String str = dis.readUTF();
int age = dis.readInt();
boolean marry = dis.readBoolean();
double income = dis.readDouble();
User user = new User(str, age, marry, income);
users[index] = user;
index ++;
}
} catch (Exception e) {
// TODO: handle exception
if(e instanceof EOFException) {
System.out.println("文件读取完毕!!!!");
}else {
e.printStackTrace();
}
}finally {
System.out.println(Arrays.toString(users));
try {
dis.close();
bis.close();
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
package com.woniuxy.java18.study.advance;
public class User {
private String name;
private int age;
private boolean marry;
private double income;
public User() {
super();
// TODO Auto-generated constructor stub
}
public User(String name, int age, boolean marry, double income) {
super();
this.name = name;
this.age = age;
this.marry = marry;
this.income = income;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public boolean isMarry() {
return marry;
}
public void setMarry(boolean marry) {
this.marry = marry;
}
public double getIncome() {
return income;
}
public void setIncome(double income) {
this.income = income;
}
@Override
public String toString() {
return "User [name=" + name + ", age=" + age + ", marry=" + marry + ", income=" + income + "]";
}
}
package com.woniuxy.java18.study.advance;
import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.UUID;
/**
* 数据输出流(高级流)
* 特点:允许代码使用一种与计算机无法的格式来进行内容输出
* @author Administrator
*
*/
public class DataOutPutStreamStudy {
public static void main(String[] args) {
// TODO Auto-generated method stub
File file = new File("D:\\" + UUID.randomUUID().toString()+".txt");
DataOutputStream dos = null;
//fos 必写
FileOutputStream fos = null;
//bos 选写(看你是否看重 IO性能)
BufferedOutputStream bos = null;
try {
if(!file.exists()) {
file.createNewFile();
}
//实例化流
fos = new FileOutputStream(file);
bos = new BufferedOutputStream(fos);
dos = new DataOutputStream(bos);
//操作流(采用UTF-8写字符串,写基本数据类型)
dos.writeUTF("我的爱人啊,你在哪里啊,我做梦都在想你!!!!");
dos.writeInt(33);
dos.writeBoolean(true);//写入boolean的值
dos.writeDouble(1200000.0);
//操作流(采用UTF-8写字符串,写基本数据类型)
dos.writeUTF("我的爱人啊,你在哪里啊,我做梦都在想你!!!!");
dos.writeInt(33);
dos.writeBoolean(true);//写入boolean的值
dos.writeDouble(1200000.0);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {
try {
dos.close();
bos.close();
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}