跟着计划、今天学习了很多内容、相信忘记的几率很大、所以留下笔记:

  1. package iotest;   
  2.    
  3. import java.io.File;   
  4. import java.io.IOException;   
  5. import java.io.RandomAccessFile;   
  6. import java.util.Date;   
  7.    
  8. import bean.Emp;   
  9.    
  10. public class IoTest {   
  11.    
  12.     /**  
  13.      * @param args  
  14.      * @throws IOException   
  15.      */   
  16.     public static void main(String[] args) throws IOException {   
  17.            
  18.         /*通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。  
  19.          * 注意“//”这里为什么需要两个反斜杠呢、因为“/”是特殊字符需要转义  
  20.          */   
  21.         File file = new File("hzw//1.txt");   
  22.            
  23.         //判断文件是否存在   
  24.         if(file.exists()){   
  25.             //删除文件   
  26.             file.delete();   
  27.         }   
  28.            
  29.         /*当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。  
  30.          * 注意、是文件、而不是文件夹  
  31.          */   
  32.         file.createNewFile();   
  33.            
  34.         /*创建此抽象路径名指定的目录。  
  35.          *当且仅当已创建目录时,返回 true;否则返回 false   
  36.          */   
  37.         //file.mkdir();   
  38.            
  39.         /*创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。  
  40.          * 注意,此操作失败时也可能已经成功地创建了一部分必需的父目录。  
  41.          * 当且仅当已创建目录以及所有必需的父目录时,返回 true;否则返回 false   
  42.          */   
  43.         //file.mkdirs();   
  44.    
  45.         //打印文件名称   
  46.         System.out.println("File Name:"+file.getName());   
  47.            
  48.         //打印路径名称   
  49.         System.out.println("File Path:"+file.getPath());   
  50.            
  51.         //打印此抽象路径名的绝对路径名字符串   
  52.         System.out.println("File abs Path:"+file.getAbsolutePath());   
  53.            
  54.         //打印此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。   
  55.         System.out.println("File Parent:"+file.getParent());   
  56.            
  57.         //打印该文件存不存在   
  58.         System.out.println(file.exists()?"存在":"不存在");   
  59.            
  60.         //打印该文件可不可读   
  61.         System.out.println(file.canRead()?"可读":"不可读");   
  62.            
  63.         //打印该文件是不是目录   
  64.         System.out.println(file.isDirectory()?"是目录":"不是目录");   
  65.            
  66.         //打印此抽象路径名表示的文件最后一次被修改的时间。 lastModified方法返回的是Long类型   
  67.         System.out.println("File last Modi:"+new Date(file.lastModified()));   
  68.            
  69.            
  70.         /*  
  71.          * 存入三条员工信息、每条员工信息为两个字段(姓名,年龄)  
  72.          * 在取出员工信息、先取出第二条员工信息、在去除第一条员工信息、最后取出第三条员工信息  
  73.          * 注意是从文件中取  
  74.          */   
  75.            
  76.         //调用写入方法   
  77.         randomAccessFileW(file);   
  78.            
  79.         //调用读取方法   
  80.         randomAccessFileR();   
  81.            
  82.            
  83.     }   
  84.        
  85.     /**  
  86.      * RandomAccessFile(随机访问)写入信息  
  87.      * @param file 文件实例对象  
  88.      * @throws IOException  异常类型  
  89.      */   
  90.     public static void randomAccessFileW(File file) throws IOException{   
  91.            
  92.         //构造3条员工信息   
  93.         Emp e1 = new Emp("fd中文sa",23);   
  94.         Emp e2 = new Emp("fd国语hsa",24);   
  95.         Emp e3 = new Emp("f汉字dsa",25);   
  96.            
  97.         /*  
  98.          * 创建从中读取和向其中写入("r"字母为读、"w"字母为写)的随机访问文件流,该文件具有指定名称。  
  99.          */   
  100.         RandomAccessFile ra = new RandomAccessFile("hzw//1.txt","rw");   
  101.            
  102.         /*另外一种方法为  
  103.          * 创建从中读取和向其中写入("r"字母为读、"w"字母为写)的随机访问文件流,该文件由 File 参数指定。  
  104.          */   
  105.         //RandomAccessFile ra = new RandomAccessFile(file,"rw");   
  106.            
  107.         /*  
  108.          * write()方法 :将 b.length 个字节从指定 byte 数组写入到此文件,并从当前文件指针开始。  
  109.          * getBytes方法:将字符串转换成byte数组。  
  110.          */   
  111.         //ra.write(e1.getName().getBytes());   
  112.            
  113.         /* writeChars方法:按字符序列将一个字符串写入该文件。  
  114.          * 按字符序列将一个字符串写入该文件。每个字符均写入数据输出流,  
  115.          * 类似于使用 writeChar 方法。写入从文件指针的当前位置开始。  
  116.          */   
  117.         ra.writeChars(e1.getName());   
  118.            
  119.         /*  
  120.          * 按四个字节将 int变量值写入该文件、先写高字节。  
  121.          */   
  122.         ra.writeInt(e1.getAge());   
  123.         ra.writeChars(e2.getName());   
  124.         ra.writeInt(e2.getAge());   
  125.         ra.writeChars(e3.getName());   
  126.         ra.writeInt(e3.getAge());   
  127.            
  128.         //关闭流   
  129.         ra.close();   
  130.     }   
  131.        
  132.     /**  
  133.      * RandomAccessFile(随机访问)读取信息  
  134.      * @throws IOException 异常类型  
  135.      */   
  136.     public static void randomAccessFileR() throws IOException{   
  137.            
  138.         //定义接收员工姓名的变量   
  139.         String name = "";   
  140.            
  141.         //定义接收read方法返回的数据字节   
  142.         //int len = 0;   
  143.            
  144.         Emp e = new Emp();   
  145.            
  146.         //定义员工姓名(字节)byte数组   
  147.         //byte[] buf = new byte[e.getLen()];   
  148.            
  149.         RandomAccessFile rw = new RandomAccessFile("hzw//1.txt""r");   
  150.            
  151.         /* skipBytes方法  
  152.          * 尝试跳过输入的 n个字节以丢弃跳过的字节。  
  153.          * 此方法可能跳过一些较少数量的字节(可能包括零)。  
  154.          * 这可能由任意数量的条件引起;在跳过 n 个字节之前已到达文件的末尾只是其中的一种可能。  
  155.          * 此方法从不抛出 EOFException。返回跳过的实际字节数。如果 n 为负数,则不跳过任何字节。  
  156.          *   
  157.          *   
  158.          */   
  159.         rw.skipBytes(e.getLen()*2 + 4);//从当前的文件指示器位置在跳转12个字节   
  160.            
  161.         /* read方法  
  162.          * 从此文件中读取一个数据字节。以整数形式返回此字节,范围在 0 到 255 (0x00-0x0ff)。如果尚无输入可用,将阻塞此方法。  
  163.          * 返回:下一个数据字节,如果已到达文件的末尾,则返回 -1。  
  164.          *       也就是返回到底读取了多少个字节读取几个字节就返回几  
  165.          */   
  166.         //len = rw.read(buf);   
  167.            
  168.         //构造员工姓名   
  169.         //name = new String(buf,0,len);   
  170.            
  171.         for (int i = 0; i < e.getLen(); i++) {   
  172.                
  173.             /* readChar方法:从此文件读取一个字符。  
  174.              * 此方法从该文件的当前文件指针开始读取两个字节。如果按顺序读取的字节为 b1 和 b2、  
  175.              * 其中 0 <= b1, b2 <= 255、则结果将等于: (char)((b1 << 8) | b2)在读取了这两个字节、  
  176.              * 检测到流的末尾或者抛出异常前,此方法一直阻塞  
  177.              */   
  178.             name += rw.readChar();   
  179.         }   
  180.            
  181.         //trim方法是去掉字符串中那些不可显示的字符(空格、控制字符等)   
  182.         System.out.println("name:"+name.trim()+"年龄:"+rw.readInt());   
  183.            
  184.         /* seek方法  
  185.          * 设置到此文件开头测量到的文件指针偏移量,在该位置发生下一个读取或写入操作。  
  186.          */   
  187.         rw.seek(0) ; //绝对定位跳转、定位到文件中的第几个字节处(如:0文件开始处)   
  188. //      len = rw.read(buf);   
  189. //      name = new String(buf,0,len);   
  190.         name ="";   
  191.         for (int i = 0; i < e.getLen(); i++) {   
  192.             name += rw.readChar();   
  193.         }   
  194.            
  195.         /* readInt方法  
  196.          * 从此文件读取一个有符号的 32 位整数。  
  197.          */   
  198.         System.out.println("name:"+name.trim()+"年龄:"+rw.readInt());   
  199.            
  200.         /*  
  201.          * 当读完第一条用户信息时、文件指示器的位置已经移动到了第二条员工信息的开始处。  
  202.          */   
  203.         rw.skipBytes(e.getLen()*2 + 4); //从当前的文件指示器位置在跳转12个字节(跳转第二条员工信息)   
  204. //      len = rw.read(buf);   
  205. //      name = new String(buf,0,len);   
  206.         name = "";   
  207.         for (int i = 0; i < e.getLen(); i++) {   
  208.             name += rw.readChar();   
  209.         }   
  210.         System.out.println("name:"+name.trim()+"年龄:"+rw.readInt());   
  211.            
  212.         //关闭流   
  213.         rw.close();   
  214.     }   
  215.        
  216.    
  217. }  

不得不感叹、网络的力量、但是有时候又忍不住想骂、算了吧!随它去、

传智播客、赞一个、下面是他们网络视频教程的地址:

看了你会忍不住的说一句:"牛"!

我以前怎么没发现呢! o(︶︿︶)o !  悔啊~~~白白浪费了那么多的光阴!