课堂笔记--文件操作

来源:互联网 发布:excel统计重复数据 编辑:程序博客网 时间:2024/06/04 18:14
 

文件操作

文件类(File)

文件类(File)提供了一些方法可以用来操作文件和获取文件的信息,包括:更改文件名、删除文件、列出目录下的文件以及文件对象属性的描述信息等。该类的出现是对文件系统中的文件以及文件夹进行对象的封装,可以通过对象的思想来操作文件以及文件夹。

 

注意:Java把目录当做一种特殊的文件来处理。

构造函数

public  File(String name);:将一个字符串路径(相对或者绝对)封装成File对象,该路径是可存在的,也可以是不存在。

public File(File parent,String child);通过将指定路径名字符创转换成为抽象路径名来创建一个新的File对象。

public File(String parent,String child);根据parent路径名字符串和child路径名字符串创建一个新的File对象。

特别的字段:

separator:平台相关的目录分隔符。
File file = new File("c:"+File.separator+"abc"+File.separator+"a.txt");

常见方法:

访问文件对象

public String getName()  //返回文件对象名,不包含路径名

public String getPath()    //File对象中封装的路径是什么,获取的就是什么

public String getAbsolutePath()   //返回绝对路径名,包含文件名

public String getParent()      //返回父文件对象的路径名,如果封装的是相对路径,返回null

public File   getParentFile()    //返回父文件对象

创建:
boolean createNewFile()throws IOException:创建文件,如果被创建的文件已经存在,则不创建。
boolean mkdir(): 创建文件夹。
boolean mkdirs(): 创建多级文件夹。

删除:
boolean delete:可用于删除文件或者文件夹。注意:对于文件夹只能删除不带内容的空文件夹,对于带有内容的文件夹,不可以直接删除,必须要从里往外删除。
void deleteOnExit():删除动作交给系统完成。无论是否反生异常,系统在退出时执行删除动作。

判断:
boolean canExecute();
boolean canWrite();
boolean canRead();
boolean exists():判断文件或者文件夹是否存在。
boolean isFile(): 判断File对象中封装的是否是文件。
boolean isDirectory():判断File对象中封装的是否是文件夹。
boolean isHidden():判断文件或者文件夹是否隐藏。在获取硬盘文件或者文件夹时,对于系统目录中的文件,java是无法访问的,所以在遍历,可以避免遍历隐藏文件。

获取
getName():获取文件或者文件夹的名称。
getPath():File对象中封装的路径是什么,获取的就是什么。
getAbsolutePath():无论File对象中封装的路径是什么,获取的都是绝对路径。
getParent(): 获取File对象封装文件或者文件夹的父目录。
注意:如果封装的是相对路径,那么返回的是null.
long length():获取文件大小。
long lastModified():获取文件或者文件最后一次修改的时间。

目录操作:

public boolean mkdir () //创建目录,正常建立时返回true

public String[] list()    //返回目录中的所有文件名字符串

public File[] listFiles()    //返回目录中的所有文件对象
static File[] listRoots():获取的是被系统中有效的盘符。
String[] list():获取指定目录下当前的文件以及文件夹名称。
String[] list(Filenamefilter): 可以根据指定的过滤器,返回过滤后的文件及文件夹名称。
File[] listFiles():获取指定目录下的文件以及文件夹对象。

文件操作:

public boolean renameTo(Filedest)  //文件重命名

public boolean  delete()   //删除空目录或文件

重命名:
renameTo(File):
File f1 = new File("c:\\a.txt");
File f2 = new File("c:\\b.txt");
f1.renameTo(f2);//将c盘下的a.txt文件改名为b.txt文件。

实例,显示文件夹下所有文件及子文件夹下的内容。

分析:方法listDir()可以显示当前文件夹下的文件,如果有子文件夹,则需使用递归调用。

注意:

一定要限定条件,否则内存溢出。

使用递归时,调用次数不要过多,否则也会出现内存溢出。

//列出指定目录下的当前的文件或者文件夹。
//想要列出当前目录下的文件夹中的文件,其实就是在重新使用该功能 。
public void listDir(File dir,int level) {
System.out.println(getLevel(level)+dir.getName());
level++;
File[] files = dir.listFiles();
for(int x =0; x<files.length; x++){
if(files[x].isDirecotry())

listDir(files[x],level);//那么就行该功能的重复使用。递归。
else
System.out.println(getLevel(level)+files[x].getName());
}
}

//想要对列出的目录有一些层次关系。
public String getLevel(int level) {
StringBuilder sb = new StringBuilder();
sb.append("|--");
for(int x=0; x<level; x++) {
sb.insert(0,"| ");
}
return sb.toString();
}

补充—文件过滤器

过滤器FileFilter的使用

FileFilter接口:用于抽象路径名的过滤器。此接口的实例可传递给 File 类的 listFiles(FileFilter) 方法。

成员方法: boolean accept(File pathname) 测试指定抽象路径名是否应该包含在某个路径名列表中。

随机访问文件类RandomAccessFile

RandomAccessFile类对文件进行随机读写操作。该对象并不是流体系中的一员。该对象中封装了字节流,同时还封装了一个缓冲区(字节数组),通过内部的指针来操作数组中的数据。

该对象特点:

该对象只能操作文件,所以构造函数接收两种类型的参数:字符串路径或File对象。

该对象既可以对文件进行读取,也可以写入。在进行对象实例化时,必须要指定的该对象的操作模式,r rw等。

 该对象中有可以直接操作基本数据类型的方法。

 该对象最有特点的方法:

skipBytes():跳过指定的字节数。

seek():指定指针的位置。

getFilePointer():获取指针的位置。

通过这些方法,就可以完成对一个文件数据的随机的访问。想读哪里就读哪里,想往哪里写就往哪里写。该对象功能,可以读数据,可以写入数据,如果写入位置已有数据,会发生数据覆盖。也就是可以对数据进行修改。

注意:

在使用该对象时,建议数据都是有规则的。或者是分段的。

该对象在实例化时,如果要操作的文件不存在,会自动建立。如果要操作的文件存在,则不会建立,如果存在的文件有数据。那么在没有指定指针位置的情况下,写入数据,会将文件开头的数据覆盖。