您的位置:首页 > 编程语言 > Java开发

javaSE_File,RandomAccessFile,FileFilter

2016-04-07 00:18 507 查看
类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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: