IO口字节流

我们可以对它进行如下分类:

1. 按处理的数据类型可分为字节流(byte)与字符流(char)
2. 按流的流向可分为输入流(in)与输出流(out)
3. 按流的功能可分为节点流(Node)和过滤流(Filter)
本篇侧重于梳理字节流相关的知识,毕竟作为字符流的前辈,它还是非常重要的。下篇继续梳理字符流。
 

先认识一些简单的输出:

package test202261;

import java.io.File;
import java.io.IOException;

public class lianxi {

    public static void main(String[] args) {
        File f=new File("d:\\a.txt");//把file
        if(f.exists()) { //判断是否D盘存在a.txt
            //f.delete();
        }
        else {//不存在就创建
            try {
            f.createNewFile();
            }catch (IOException e) {
                e.printStackTrace();
            }
            System.out.println("文件名称:"+f.getName());
            System.out.println("文件所在路径:"+f.getPath());
            System.out.println("文件的父目录:"+f.getParent());
            System.out.println("文件绝对路径:"+f.getAbsoluteFile());
            System.out.println(f.canWrite()?"文件可写":"文件不可写");
            System.out.println(f.isDirectory()?"文件是目录":"文件不是目录");
            System.out.println("文件上次修改的时间"+f.lastModified());
            System.out.println("文件大小:"+f.length());
        }
    }

}

以学生信息为例,写入计算机文档和读取信息

//学生信息编辑
package test20220602;

public class student {
	 String name;
	 int age;
	public student(String name,int age) {//判断name长度是否达到8个字节
		if(name.length()>8)
			name=name.substring(0, 8);
		else {//否则,用空格补齐
			while(name.length()<8)
			name=name+"\u0000";
			}
		this.name=name;
		this.age=age;
	}
	}

//测试类
package test20220602;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;

public class test {

	public static void main(String[] args) throws IOException {
		student s1=new student("liangzai", 20);
		student s2=new student("ongzai", 19);
		student s3=new student("xizai", 21);
		String str = null;
		RandomAccessFile ra=null;
		try {
			ra=new RandomAccessFile("d:\\a.txt", "rw");//调用RandomAccessFile类(该类在里面已经有了),rw表示可读可写
			//将下面的信息写入到文档a.txt里面
			ra.write(s1.name.getBytes());
			ra.writeInt(s1.age);
			ra.write(s2.name.getBytes());
			ra.writeInt(s2.age);
			ra.write(s3.name.getBytes());
			ra.writeInt(s3.age);
			//System.out.println(s1.age+"\n"+s1.name);	
		} catch (FileNotFoundException e) {
			/*
			 *  当try语句中出现异常是时,会执行catch中的语句,java运行时系统会自动将catch括号中的Exception e 初始化,
			 *  也就是实例化Exception类型的对象。e是此对象引用名称。然后e(引用)会自动调用Exception类中指定的方法,也就出现了e.printStackTrace() ;。
			 *  printStackTrace()方法的意思是:在命令行打印异常信息在程序中出错的位置及原因。(这是白话解释,比较容易理解)
			 */
			e.printStackTrace();
		}
			RandomAccessFile rf=new RandomAccessFile("d:\\a.txt", "rw");//只可读
			str="";
			rf.getFilePointer();//假如,初始化,这里写ra.get.....则try里面没报错,执行,则这句可能有问题
			rf.skipBytes(12);//因为第一个同学的信息占了12字节(string占8字节,int占4字节),所以定位到12字节的位置去
			System.out.println("第二个学生的信息:");//现在名字只能是英文或者拼音才能输出读取
			for(int i=0;i<8;i++) {
				str=str+(char)rf.readByte();
			}
			System.out.println("第二个学生的姓名:"+str);
			System.out.println("第二个学生的年龄:"+rf.readInt());
			/********************************************************/
			rf.seek(0);//0定位开始
			str="";
			for(int i=0;i<8;i++) {
				str=str+(char)rf.readByte();
			}
			System.out.println("第一个学生的姓名:"+str);
			System.out.println("第一个学生的年龄:"+rf.readInt());
			/********************************************************/
			rf.seek(24);//跳到24字节后开始,就到了第三个同学的信息位置
			str="";
			for(int i=0;i<8;i++) {
				str=str+(char)rf.readByte();
			}
			System.out.println("第三个学生的姓名:"+str);
			System.out.println("第三个学生的年龄:"+rf.readInt());
			
			
	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值