IO流详解

如图

File

1.定义:首先 File并不属于IO流,这里为了引出IO流,先提出File的概念。Java提供的file类对象不是简单的文件,它包含文件(.txt文件,.exe,或者音频,视频等都属于文件)+文件路径(即文件夹/文件目录)等。
这里介绍file类的常见方法

File   file=new File("文件名/文件路径");//创建file类对象实例
//ex.     File  file1=new File("D://IO");//file对象指的是路径
//ex.     File  file2=new File("D://IO//1.txt");//file对象指的是路径下的1.txt文件
//    如果没有写绝对路径,默认file对象与src同级。
//ex.  File  file3=new File("1.txt") ;      即file所值的对象与当前src的路径并列(已测试,idea下是这样子的)
file1.length();//求文件的字节大小
file1.exits();//判断文件是否存在
//如果文件不存在也可以  也可以创建该文件
file2.createNewFile();//创建一个D://IO//1.txt文件(不可以文件夹,有专门创建文件夹的方法,创建要抛IO异常
//创建文件夹
file1.mkdir();//创建D://IO文件夹
//获取文件名
file1.getName();
//获取文件的绝对路径
file1.getAbsolutePath();
//获取文件的相对路径
file1.getPath():
//文件的删除
file1.delete();
//判断是否是文件
file1.isFile();
//判断是否是文件夹
file1.isDirectory();
//获取文件上次修改的时间
file1.LastModifiled();
//获取当前路径下的所有文件
file2.ListFile();//记住,这里只获得目录下的第一层文件,如果需要获得目录下的所有文件,用循环反复进入子目录来获取子目录下的文件来获得该目录下的所有文件。

RandomAccessFile

RandomAccessFile类:随机读写类,可以对文件进行读写的操作,比File类对文件的操作更多一些。

//创建RandomAccessFile随机读写类对象
RandomAccessFile  ad=new RandomAccessFile("2.txt","rw");
//如果2.txt文件不存在,会自动创建一个2.txt文件,这是File类不存在的功能,其次rw表示赋予了读写权限  read+write 可以对文件进行
读写操作
//read  从文件中读取内容,输入到程序中
//write  从程序中输出,写到文件中。

接下来介绍randomeAccessFile类的一些常见方法及操作
首先是ad对象的wirte方法
这里插入图片描述

ad.write(65);//65表示字符A 表示将字符A写到2.txt文件中 
//注意!write(int b)  该方法只能一个字节字节的写 
//也就是说即使你输入ad.write(99999) 也只会读该数转为2进制以后的低八位

那么这里怎么读多个字节到文件中去呢?
在这里插入图片描述
查jdk1.8API 我们可以知道我们可以一次读一个字节数组,见例子

byte [] b="听说隔壁那个女孩子长得不错".getBytes();
//.getBytes()是将字符串转为字节数组,且设置GBK编码格式,这里如果我说错了还望诸位大佬指出来。
//  可以用b.length求出该byte数组的长度,即求出该字节数组里的字节数。在java中通常一个英文一个字节,一个中文3个字节(Utf-8_),具体几个字节,看是哪种编码。
ad.write(b);//将该字符数组写入文件中,如下图

在这里插入图片描述

//见一个write方法
 ad.write(b,0,6);//把字节数组b的前6个字节写进去

运行一下,成功
在这里插入图片描述
"隔壁"是新写进来的,这里注意,对于随机读写类来说,每次重新运行一次,都会覆盖原来的文件,不会在之前的文件上进行写入的追加。没听懂的你运行一遍就明白了。
另外讲讲写入文件的时候怎么进行换行 调用如下两个方法

   ad.write('\r');
   ad.write('\n');

在这里插入图片描述
运行结果:
在这里插入图片描述
这里还要介绍一下游标的概念
在这里插入图片描述
游标是指向文件中字符的一个指针,默认为0,当开始往文件中写入东西以后,游标右移,写一个字字节游标又移一位

ad.getFilePointer();//获得当前游标的位置
ad.seek(index);//设置游标的位置
ad.skipBytes(index);//游标从当前位置跳多少字节

接下来我们来讲讲读取(read)相关操作,从文件中读取字节输出到程序中。查API
在这里插入图片描述

//首先解释ad.read()方法
int index=ad.read();//返回一个数字,表示的是读取的字节代表的数字,如A字符占一个字节,假设文件中是字符A,那么读使用ad.read()方法返回的index就是65  再输出应该为A或者65 推测是65 
System.out.println(index);

结果:
在这里插入图片描述

结果为-1,别惊慌,为什么结果为-1呢?我们刚刚在2.txt中写入了如下内容
在这里插入图片描述
read()方法一次读取一个字节,但是一个"隔"字是三个字节,那么就相当于把一个隔字拆成了三份,很明显,我们这样子来读取一个中文是行不通的,我们只能用ad.write()方法来读取占一个字节的字符,不能来读取占三个字节的中文字符,这个时候怎么来读取中文字符呢?
我们用ad.write(byte[] b) 方法,如下:

在这里插入图片描述

结果:
在这里插入图片描述
关于随机读写类的read读取方法,还有一个read(byte[] b,int off,int length)方法没有讲,和wirte(byte[] b,int off,int length)差不多,自行测试。

内容未完,待更新。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值