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("文件操作关闭!");
}
}