类File
java.lang.Object
java.io.File
public static voidmain(String[] args) throws IOException {
Filefile = new File("test.txt");
// 与./demo.text一样,指当前目录/项目根目录
boolean exists()
* 判断File表示的文件或目录是否真实存在
if(!file.exists()){
boolean createNewFile() throwsIOException {}
*当前目录下创建一个文件, 并抛出异常
file.createNewFile();
System.out.println("创建完毕!");
}
boolean delete()
*删除test.txt文件
File file = newFile("test.txt");
if(file.exists()){
file.delete();
System.out.println("删除完毕!");
}
*使用delete删除目录时,必须保证该目录是一个空目录(不包含任何子项)才可以将其删除
File dir = newFile("demo");
if(dir.exists()){
dir.delete();
System.out.println("删除完毕!");
}
boolean mkdir()
*在当前目录下创建一个目录demo
File dir = newFile("demo");
if(!dir.exists()){
dir.mkdir();
System.out.println("创建完毕!");
}
boolean mkdirs()
*在当前目录下创建多级目录a/b/c/d/e/f:
File dir = new File(
"a"+File.separator+
"b"+File.separator+
"c"+File.separator+
"d"+File.separator+
"e"+File.separator+
"f"
);
if(!dir.exists()){
dir.mkdirs();
System.out.println("创建完毕!");
}
File[] listFiles()
获取一个目录中的内容
返回值:抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件和目录。如果目录为空,那么数组也将为空。如果抽象路径名不表示一个目录,或者发生I/O错误,则返回null。
* 获取当前目录中的所有内容
File dir = newFile(".");
//获取一个目录中的所有子项
File[] subs = dir.listFiles();
for(File sub:subs){
if(sub.isFile()){
System.out.print("文件:");
}else{
System.out.print("目录:");
}
System.out.println(sub.getName());
}
接口 FileFilter
Java.io
FileFilter
*用于抽象路径名的过滤器
boolean accept(File pathname);//必须重写该接口中的抽象方法accept()
*使用文件过滤器(FileFilter)获取一个目录中满足条件的子项,其他则被忽略
File dir = newFile(".");
FileFilter filter= new FileFilter(){ //接口FileFilter的匿名内部类
public boolean accept(File file) { //重写抽象方法
String name = file.getName();
System.out.println("正在过滤:"+name);
returnisDirectory();
}
};
File[] subs =dir.listFiles(filter);
for(File sub :subs){
System.out.println(sub.getName());
}
删除多级目录
递归
public static void main(String[] args) {
File dir = newFile("a");
delete(dir);
}
/**
* 删除给定的File对象表示的文件或目录a/b/c/d/e/f
* @paramargs
*/
public staticvoid delete(File file){
//递归 (方法内部调用自己方法,不是100%成立,条件写不好容易是个死循环) if(file.isDirectory()){
//先删除该目录中所有内容
File[]subs = file.listFiles();
for(Filesub : subs){
delete(sub);
}
}
file.delete();
}
类RandomAccessFile
java.lang.Object
java.io.RandomAccessFile
* 该类是专门用于读写文件数据的类
* 其提供了很多方便的方法来进行读写操作
* 其读写是基于指针进行的,总是在指针当前位置读写
RandomAccessFile有两种创建模式:
* "r":只读模式,仅对文件数据做读取操作
* "rw":读写模式,可以对文件数据读写
void write(int d)
* 一次写出一个字节,写出的是该int值对应的二进制中的"低八位"
* vvvvvvvv
* 00000000 00000000 00000000 00000000
* 11111111 11111111 11111111 11111111 -1
RandomAccessFile raf = newRandomAccessFile("test.dat","rw");
raf.write(1);
raf.close();
int read()
* 读取一个字节,并以int形式返回
* 若返回的int值为-1,则表示读取到文件末尾
RandomAccessFile raf = new RandomAccessFile("test.dat","r");
int d = raf.read();
System.out.println(d);
raf.close();
byte[] getBytes()
*以当前系统默认字符集将字符串转换成对应的字节
*windows:GBK
*linux:UTF-8
RandomAccessFile raf = new RandomAccessFile("raf.txt","rw");
String str ="异能鼻祖";
byte[]date = str.getBytes();//当前系统默认GBK编码形式 字符*2个字节
// byte[] date =str.getBytes("UTF-8");//默认UTF-8编码形式 字符*3个字节
void write(byte[] date) 批量写出字节
*一次性将给定的字节数组中所有字节写入到文件中
raf.write(date);
System.out.println("over"+raf.length());
raf.close();
基于指针的读写操作:
RandomAccessFile raf = newRandomAccessFile("raf.dat","rw");
long getFilePointer()
*获取当前RandomAccessFile指针位置
longpos = raf.getFilePointer();
System.out.println("pos:"+pos);//pos:0
int imax= Integer.MAX_VALUE;
//4个字节
raf.write(imax>>>24);
raf.write(imax>>>16);
raf.write(imax>>>8);
raf.write(imax);
System.out.println("pos:"+raf.getFilePointer());//pos:4
//4个字节
raf.writeInt(imax);
System.out.println("pos:"+raf.getFilePointer());//pos:8
//8个字节
raf.writeLong(123L);
System.out.println("pos:"+raf.getFilePointer());//pos:16
//8个字节
raf.writeDouble(123.123);
System.out.println("pos:"+raf.getFilePointer());//pos:24
void seek(long pos)
*移动指针到指定位置
//将指针移动到文件第一个字节处
System.out.println("移动指针到文件开始处");
raf.seek(0);
System.out.println("pos:"+raf.getFilePointer());//pos:0
int readInt()
*连续读取4个字节,并转换为int返回
* 如果在读取int值的过程中发现读取到了文件末尾,则抛出EOExpection
int i= raf.readInt();
System.out.println("i:"+i);//已经写入的4个字节imax i:2147483647
System.out.println("pos:"+raf.getFilePointer());
raf.seek(8);//pos:8
longl = raf.readLong();
System.out.println("L:"+l);//L:123
System.out.println("pos:"+raf.getFilePointer());//pos:16
doubled = raf.readDouble();
System.out.println("d:"+d);//d:123.123
System.out.println("pos:"+raf.getFilePointer());//pos:24
raf.close();