使用字节流读写二进制文件:DataInputStream和DataOutputStream

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();//关闭目标文件的写入

	}

}
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值