主要复习了File类与RandomAccessFile类的常用API
File类
File类是JavaIO下的一个类,用于操作文件和目录
构造方法摘要
值得一提的是,创建File类对象并且是在机器上创造出一个文件,或者目录,而是创造出File对象来对应机器内的实体文件。
File(File parent, String child)
根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
File(String pathname)
通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
File(String parent, String child)
根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
File(URI uri)
通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的 File 实例。
目录的创建与删除
那么如果我们要创建这个目录或删除这个目录的话,首先我们要确定是否存在目录,
那么就可以使用以下来做到
if(!file.exists()){
file.mkdir();
}
else{
file.delete();
}
注意点: File构造方法里中,文件的目录路径里的分隔符可以用File.seprator代替
isDirectory()
测试此抽象路径名表示的文件是否是一个目录。
boolean isFile()
测试此抽象路径名表示的文件是否是一个标准文件。
创建文件
使用CreateNewFile来创建文件
File file = new File("E:\\日记1.txt");
if(!file.exists()){
try {
file.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
boolean createNewFile()
当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件
FileUtil
在使用File类时,我们最好将其各种功能实现一个工具类,这里我实现了一个ListDirectory类的操作
/**
* 列出指定目录下(包括其子目录的所有文件)
* @param dir
* @throws IOException
*/
public static void ListDirectory(File dir)throws IOException{
if(!dir.exists()){
throw new IllegalArgumentException("目录"+dir+"不存在");
}
if(!dir.isDirectory()){
throw new IllegalArgumentException(dir+"不是目录");
}
File[] files = dir.listFiles();
if(files!=null && files.length>0){
for(File file:files){
if(file.isDirectory()){
ListDirectory(file);
}
else{
System.out.println(file);
}
}
}
}
RandomAccessFile
File类支持表示文件的信息,但不支持对文件的读与写,
与之相反,RandomAccessFile类支持对文件内容的访问,既可以读,也可以写,并且该类存在一个文件指针,支持随机访问文件,访问文件的任意位置。
打开模式
有两种模式
- “rw” 读写模式
- “r” 只读模式
RandomAccessFile raf = new RandomAccessFile(file,"rw");
在打开文件时, 文件指针在开头。
读写
读写方法都是以一个字节(8位)一个字节的读写,并且在文件读写完成后必须将文件关闭。
package FileDemo;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
File demo = new File("demo");
if(!demo.exists()){
demo.mkdir();
}
File file = new File(demo,"raf.dat");
if(!file.exists()){
try {
file.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
RandomAccessFile raf = new RandomAccessFile(file,"rw");
//显示文件指针
System.out.println(raf.getFilePointer());
// 写入一个int整数, int整数有4个字节,write每次只读1个字节
int a = 0x7fffffff;
raf.write(a>>24);
raf.write(a>>16);
raf.write(a>>8);
raf.write(a);
// 也可以直接写入writeint
raf.writeInt(a);
//写中文
String s = "中文";
byte[] gbk = s.getBytes("gbk");
raf.write(gbk);
// 读文件,必须把指针移到头部
raf.seek(0);
// 一次性读取
byte [] buf = new byte[(int) (raf.length())];
raf.read(buf);
System.out.println(Arrays.toString(buf));
// 以16进制表示
for(byte b : buf){
System.out.print(Integer.toHexString(b&0xff)+" ");
}
// 最终要关闭
raf.close();
}
}