import java.io.DataInputStream;//引入相关类
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* 读写二进制文件(所有文件)
* 使用字节流DataInputStream和DataOutputStream
* @author Administrator
*
*/
public class DataInputOutput {
public static void main(String[] args) throws IOException {//抛出异常
/**
* 写入文件数据时,系统运行时,首先判断该文件路径是否合法,若不合法,抛出异常,若合法
* 其次判断文件路径是否存在,若不存在,将在运行时创建此文件,创建空文件
* 再次判断文件路径代表的是文件目录还是文件(文件有后缀),若是文件目录,抛出异常,若是文件
* 再次判断写入内容是覆盖文件中原有的内容还是文件尾追加写入,默认情况下,向文件写数据时将覆盖文件中原有的内容
* 最后,写入文件内容
*/
//1.写文件
//1.1创建输出流对象,该对象为目标二进制文件,对象引用变量指向目标二进制文件,构造方法就一种
//DataOutputStream(OutputStream out)
//DataOutputStream构造方法参数为抽象类OutputStream的对象,所以首先必须使用OutputStream的子类创建对象
//最常用的是创建FileOutputStream的对象fos并将其作为DataOutputStream构造方法参数
OutputStream fos=new FileOutputStream("C:\\Users\\Administrator\\Desktop\\streamfile.txt",true);
DataOutputStream dos=new DataOutputStream(fos);
//1.2向目标二进制文件中写入内容(参数为基本数据类型和String类型,写入后转为二进制内容)
//写入方法名均以write开头,常用方法有多种
//write(int b)//写入byte值,1个字节,该字节取自int参数的低8位二进制码,高位忽略
//writeBoolean(boolean v)//写入boolean值,1个字节[boolean值转为byte型整数1(true)或0(false)写入二进制文件]
//writeByte(int v)//写入byte值,1个字节,该字节即字节类参数的二进制码
//writeShort(int v)//写入short值,2个字节,高8位优先,低8位之后
//writeChar(int v)//写入char值,2个字节,高8位优先,低8位之后
//writeInt(int v)//写入int值,4个字节,高字节优先,低字节之后
//writeLong(long v)//写入long值,8个字节,高字节优先,低字节之后
//writeFloat(float v)//写入float值,4个字节,高字节优先,低字节之后
//writeDouble(double v)//写入double值,8个字节,高字节优先,低字节之后
//writeBytes(String s)//将字符串每个字符的低8位依次写入byte数组,该数组写入目标二进制文件
//writeChars(String s)//将字符串每个字符依次写入char数组,该数组写入目标二进制文件
//write(byte b[], int off, int len)//写入字节数组中从off下标开始len个长度的字节
dos.write(123);
//1.3刷新输出流DataOutputStream到文件(相当于将该缓存流刷入到磁盘文件)
dos.flush();
//1.4关闭输出流FileOutputStream
fos.close();
/**
* 读文件数据时,系统运行时,首先判断该文件路径是否合法,若不合法,抛出异常,若合法
* 其次判断文件路径是否存在,若不存在,抛出异常,若存在
* 再次判断文件路径代表的是文件目录还是文件(文件有后缀),若是文件目录,抛出异常,若是文件
* 最后,读出文件内容
*/
//2.读文件
//2.1创建输入流对象,该对象为目标二进制文件,对象引用变量指向目标二进制文件,构造方法就一种
//DataInputStream(InputStream in)
//DataInputStream构造方法参数为抽象类InputStream的对象,所以首先必须使用InputStream的子类创建对象
//最常用的是创建FileInputStream的对象fis并将其作为DataInputStream构造方法参数
InputStream fis=new FileInputStream("C:\\Users\\Administrator\\Desktop\\streamfile.txt");
DataInputStream dis=new DataInputStream(fis);
//2.2实例方法available()返回目标二进制文件大小(字节数)
System.out.println("可读取的字节数:"+dis.available());
//2.3读取目标二进制文件的每一个字符
//读取方法名均以read开头,常用方法有多种,基本上和write的所有方法对应,不赘述
//实例方法read()读取下一个字符,并返回其ASCII码值
//Reads the next byte of data from this input stream.
//The value byte is returned as an int in the range 0 to 255
System.out.println("文件内容是:");
int data;
while ((data=dis.read())!=-1) {
System.out.print((char)data);
}
//2.4依次关闭输入流
//先关直接的输入流,后间接的输入流
dis.close();
fis.close();
//3.复制文件,从源二进制文件到目标二进制文件
//通过输入流DataInputStream将源二进制文件读到内存,通过输出流DataOutputStream将内存数据写入目标二进制文件
//3.1创建源文件输入流引用变量
FileInputStream fis1=new FileInputStream("E:\\Wallpaper\\river.jpg");
DataInputStream dis1=new DataInputStream(fis1);
//3.2创建目标文件输出流引用变量
FileOutputStream fos1=new FileOutputStream("C:\\Users\\Administrator\\Desktop\\rivercopy.jpg",true);
DataOutputStream dos1=new DataOutputStream(fos1);
//3.3从源文件读入数据写入目标文件,逐个字节读出,逐个字节写入
int temp;
while ((temp=dis1.read())!=-1) {
dos1.write(temp);
}
//3.4关闭流
fis1.close();//关闭源文件的读入
dos1.close();//关闭目标文件的写入
}
}
使用字节流读写二进制文件:DataInputStream和DataOutputStream
最新推荐文章于 2024-05-28 00:40:05 发布