java中I/O中的File类

来源:互联网 发布:mac win10截屏快捷键 编辑:程序博客网 时间:2024/04/30 07:41
File类
   java.io.File用于描述文件或目录,通过File可以操作硬盘上的文件或目录
   File仅是用于描述文件或目录的,不能对内容进行访问
   File可以描述文件或目录的名字,大小等.
   
   File常用的API
      File(String path):构造方法,创建代表指定地址的文件或目录的File对象
      length():         返回文件的长度(字节数)
      lastModified();   最后修改时间
      getName();        文件或目录名
      getPath();        获取路径
      exists():         文件或目录是否存在
      isFile():      判断File对象是否为一个文件
      isDirctoty():     判断File对象是否为一个目录
      mkdir():          创建目录
      mkdirs():         创建目录及所有未创建的上及目录
      delete():         删除文件或目录  (若删除的是一个目录,那么该目录必须是空目录!否则删除不了)
      createNewFile():  创建文件

      listFile():       获取当前目录下的所有子项

==========================================================================================

示例:

  package com.szy.day06_File;


import java.io.File;


/**
 * File类
 * 
 * @author soft1
 * 
 */
public class FileDemo {
public static void main(String[] args) throws Exception {
// "."当前目录,这个属于相对路径.所代表的目录为当前项目目录
// 当前file对象描述项目文件夹下的文件
File file = new File("." + File.separator + "tt.txt");
//如果文件不存在
if (!file.exists()) {
file.createNewFile();// 创建这个文件
}
System.out.println(file.getName());// 输出文件名
System.out.println(file.length());// 文件长度(没有内容为0或者磁盘上不存在该文件也为0,有内容!0)

/**
* 创建目录
*/
File dir=new File("."+File.separator+"a"+File.separator+"b");
if(!dir.exists()){
dir.mkdirs();//创建目录及所有未创建的上及目录
}

}
}

==========================================================================================
RandomAccessFile
     RandomAccessFile类是JAVA提供的功能丰富的文件访问类,它提供了众多功能的方法访问文件内容,也可以写数据
     它支持'随机访问'方式,可以访问文件的'任意位置'
     
     java文件模型:
          在硬盘上的文件 byte by byte .字节形式保存
          
     打开文件:
         有两种打开文件的模式:"rw" 读写, "r" 只读
         new RandomAccessFile(file,"rw");
         
     RandomAccessFile对文件内容的操作是基于指针的!
     打开文件是默认情况下指针是指向文件开头的pointer=0;
     
     写入方法:
         raf.write(int data).写入[一个字节].写入的是int值的[低八位],指针自动向下移动,准备再次写入
         
     读取方法:
         int data=raf.read().从指针指向的位置读取当前字节(8位),当返回值为-1时,说明读取到文件末尾了(无内容了)
         
         为什么用int值来描述一个byte.
         因为当文件读取到末尾时,返回的是-1,这个-1是int值的-1,也就是说是32个1,而byte的-1是8个1.为了避免使用-1
         代表文件末尾与读取数据的-1值冲突,所以使用int作为返回值
         

       文件操作完毕以后一定要关闭


====================================================================================================

示例:

 package com.szy.day06_File;


import java.io.File;
import java.io.RandomAccessFile;
import java.util.Arrays;


/**一次只能写入一个字节
 * RandomAccessFile演示
 *1.创建一个文件data.dat
 *2.使用RandomAccessFile打开文件data.dat
 *3.写'A'和'B'
 *4.写入一个int最大值 0x7fffffff
 *5.写入一个GBK编码的汉子'中'
 *6.一次行读取数据
 *7.关闭RandomAccessFile
 * @author soft1
 * 
 */
public class RandomAccessFileDemo {
public static void main(String[] args)throws Exception {
       File file=new File("."+File.separator+"data.dat");
       if(!file.exists()){
      file.createNewFile();//创建文件
       }
       
       RandomAccessFile raf=new RandomAccessFile(file,"rw");
       System.out.println("指针位置;"+raf.getFilePointer());//输出指针位置
       
       raf.write('A');//写入一个'A'
       System.out.println("指针位置;"+raf.getFilePointer());//1
       
       raf.write('B');//写入一个'B'
       System.out.println("指针位置;"+raf.getFilePointer());//2
       
       //写入一个int最大值 0x7fffffff 因为一次只能写入一个字节,int是四个字节
       int i=0x7fffffff;
       raf.write(i>>>24);//把高八位移动到低八位 00 00 00 7f
       raf.write(i>>>16);//00 00  f7ff
       raf.write(i>>>8);//00 7f ff ff
       raf.write(i);//7f ff ff ff
       
       String s="中";
       byte gbk[]=s.getBytes("gbk");//返回'中'的GBK字节编码
       raf.write(gbk);//一次性写入一个字节数组
       
       //一次性读取所有字节
       /**
        * RandomAccessFile读取数据的方法:
        *        int read();读取一个字节,返回值为读取的数据,若为-1代表读取到文件末尾
        *        int read(byte[] buf);尝试一次性读取给定的数组长度的字节数,并存入该数组,但实际读取的字节数
        *        要以是否达到文件末尾为准.返回值为:总共读取的字节数,若为-1代表文件末尾
        * raf.length()返回的是一个long值,代表当前文件的总字节数
        */
        raf.seek(0);//将指针移动到文件头部
        //一次性读取内容
        byte[] b=new byte[(int)raf.length()];
        int sum=raf.read(b);
        System.out.println("读取了"+sum+"个字节");
       //查看内容(10进制形式)
        System.out.println(Arrays.toString(b));
        /**
         * java1.5以后的新特性:增强for循环
         * 用途:仅用于循环数组和集合
         * for(Type t:Array){
         * }
         * Array:集合或数组
         * Type:集合或者数组中的元素类型
         * t:引用变量
         */
        for(byte t:b){
        System.out.print(Integer.toHexString(t)+" ");
        }
       //7
       raf.close();
       System.out.println("文件操作关闭!");
}
}

原创粉丝点击