跟着计划、今天学习了不少内容、相信忘记的概率很大、因此留下笔记:java
- package iotest;
- import java.io.File;
- import java.io.IOException;
- import java.io.RandomAccessFile;
- import java.util.Date;
- import bean.Emp;
- public class IoTest {
- /**
- * @param args
- * @throws IOException
- */
- public static void main(String[] args) throws IOException {
- /*经过将给定路径名字符串转换为抽象路径名来建立一个新 File 实例。
- * 注意“//”这里为何须要两个反斜杠呢、由于“/”是特殊字符须要转义
- */
- File file = new File("hzw//1.txt");
- //判断文件是否存在
- if(file.exists()){
- //删除文件
- file.delete();
- }
- /*当且仅当不存在具备此抽象路径名指定名称的文件时,不可分地建立一个新的空文件。
- * 注意、是文件、而不是文件夹
- */
- file.createNewFile();
- /*建立此抽象路径名指定的目录。
- *当且仅当已建立目录时,返回 true;不然返回 false
- */
- //file.mkdir();
- /*建立此抽象路径名指定的目录,包括全部必需但不存在的父目录。
- * 注意,此操做失败时也可能已经成功地建立了一部分必需的父目录。
- * 当且仅当已建立目录以及全部必需的父目录时,返回 true;不然返回 false
- */
- //file.mkdirs();
- //打印文件名称
- System.out.println("File Name:"+file.getName());
- //打印路径名称
- System.out.println("File Path:"+file.getPath());
- //打印此抽象路径名的绝对路径名字符串
- System.out.println("File abs Path:"+file.getAbsolutePath());
- //打印此抽象路径名父目录的路径名字符串;若是此路径名没有指定父目录,则返回 null。
- System.out.println("File Parent:"+file.getParent());
- //打印该文件存不存在
- System.out.println(file.exists()?"存在":"不存在");
- //打印该文件可不可读
- System.out.println(file.canRead()?"可读":"不可读");
- //打印该文件是否是目录
- System.out.println(file.isDirectory()?"是目录":"不是目录");
- //打印此抽象路径名表示的文件最后一次被修改的时间。 lastModified方法返回的是Long类型
- System.out.println("File last Modi:"+new Date(file.lastModified()));
- /*
- * 存入三条员工信息、每条员工信息为两个字段(姓名,年龄)
- * 在取出员工信息、先取出第二条员工信息、在去除第一条员工信息、最后取出第三条员工信息
- * 注意是从文件中取
- */
- //调用写入方法
- randomAccessFileW(file);
- //调用读取方法
- randomAccessFileR();
- }
- /**
- * RandomAccessFile(随机访问)写入信息
- * @param file 文件实例对象
- * @throws IOException 异常类型
- */
- public static void randomAccessFileW(File file) throws IOException{
- //构造3条员工信息
- Emp e1 = new Emp("fd中文sa",23);
- Emp e2 = new Emp("fd国语hsa",24);
- Emp e3 = new Emp("f汉字dsa",25);
- /*
- * 建立从中读取和向其中写入("r"字母为读、"w"字母为写)的随机访问文件流,该文件具备指定名称。
- */
- RandomAccessFile ra = new RandomAccessFile("hzw//1.txt","rw");
- /*另一种方法为
- * 建立从中读取和向其中写入("r"字母为读、"w"字母为写)的随机访问文件流,该文件由 File 参数指定。
- */
- //RandomAccessFile ra = new RandomAccessFile(file,"rw");
- /*
- * write()方法 :将 b.length 个字节从指定 byte 数组写入到此文件,并从当前文件指针开始。
- * getBytes方法:将字符串转换成byte数组。
- */
- //ra.write(e1.getName().getBytes());
- /* writeChars方法:按字符序列将一个字符串写入该文件。
- * 按字符序列将一个字符串写入该文件。每一个字符均写入数据输出流,
- * 相似于使用 writeChar 方法。写入从文件指针的当前位置开始。
- */
- ra.writeChars(e1.getName());
- /*
- * 按四个字节将 int变量值写入该文件、先写高字节。
- */
- ra.writeInt(e1.getAge());
- ra.writeChars(e2.getName());
- ra.writeInt(e2.getAge());
- ra.writeChars(e3.getName());
- ra.writeInt(e3.getAge());
- //关闭流
- ra.close();
- }
- /**
- * RandomAccessFile(随机访问)读取信息
- * @throws IOException 异常类型
- */
- public static void randomAccessFileR() throws IOException{
- //定义接收员工姓名的变量
- String name = "";
- //定义接收read方法返回的数据字节
- //int len = 0;
- Emp e = new Emp();
- //定义员工姓名(字节)byte数组
- //byte[] buf = new byte[e.getLen()];
- RandomAccessFile rw = new RandomAccessFile("hzw//1.txt", "r");
- /* skipBytes方法
- * 尝试跳过输入的 n个字节以丢弃跳过的字节。
- * 此方法可能跳过一些较少数量的字节(可能包括零)。
- * 这可能由任意数量的条件引发;在跳过 n 个字节以前已到达文件的末尾只是其中的一种可能。
- * 此方法从不抛出 EOFException。返回跳过的实际字节数。若是 n 为负数,则不跳过任何字节。
- *
- *
- */
- rw.skipBytes(e.getLen()*2 + 4);//从当前的文件指示器位置在跳转12个字节
- /* read方法
- * 今后文件中读取一个数据字节。以整数形式返回此字节,范围在 0 到 255 (0x00-0x0ff)。若是尚无输入可用,将阻塞此方法。
- * 返回:下一个数据字节,若是已到达文件的末尾,则返回 -1。
- * 也就是返回到底读取了多少个字节读取几个字节就返回几
- */
- //len = rw.read(buf);
- //构造员工姓名
- //name = new String(buf,0,len);
- for (int i = 0; i < e.getLen(); i++) {
- /* readChar方法:今后文件读取一个字符。
- * 此方法从该文件的当前文件指针开始读取两个字节。若是按顺序读取的字节为 b1 和 b二、
- * 其中 0 <= b1, b2 <= 25五、则结果将等于: (char)((b1 << 8) | b2)在读取了这两个字节、
- * 检测到流的末尾或者抛出异常前,此方法一直阻塞
- */
- name += rw.readChar();
- }
- //trim方法是去掉字符串中那些不可显示的字符(空格、控制字符等)
- System.out.println("name:"+name.trim()+"年龄:"+rw.readInt());
- /* seek方法
- * 设置到此文件开头测量到的文件指针偏移量,在该位置发生下一个读取或写入操做。
- */
- rw.seek(0) ; //绝对定位跳转、定位到文件中的第几个字节处(如:0文件开始处)
- // len = rw.read(buf);
- // name = new String(buf,0,len);
- name ="";
- for (int i = 0; i < e.getLen(); i++) {
- name += rw.readChar();
- }
- /* readInt方法
- * 今后文件读取一个有符号的 32 位整数。
- */
- System.out.println("name:"+name.trim()+"年龄:"+rw.readInt());
- /*
- * 当读完第一条用户信息时、文件指示器的位置已经移动到了第二条员工信息的开始处。
- */
- rw.skipBytes(e.getLen()*2 + 4); //从当前的文件指示器位置在跳转12个字节(跳转第二条员工信息)
- // len = rw.read(buf);
- // name = new String(buf,0,len);
- name = "";
- for (int i = 0; i < e.getLen(); i++) {
- name += rw.readChar();
- }
- System.out.println("name:"+name.trim()+"年龄:"+rw.readInt());
- //关闭流
- rw.close();
- }
- }
不得不感叹、网络的力量、可是有时候又忍不住想骂、算了吧!随它去、数组
传智播客、赞一个、下面是他们网络视频教程的地址:网络
看了你会忍不住的说一句:"牛"!dom
我之前怎么没发现呢! o(︶︿︶)o ! 悔啊~~~白白浪费了那么多的光阴!ide