第十二章 4 文件操作

 

12.4、文件操作

一、文件类File:

文件类(File)提供了一些方法可以用来操作文件和获取文件的信息,包括:更改文件名、删除文件、列出目录的文件以及文件对象属性的描述信息等。

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

File类的声明如下:

Public class File extends Object implements Serializable,Comparable

二、构造方法:

Public File(String pathname):根据parent抽象路径名和child路径名字字符串创建一个新File对象。

Public File(String path):path是文件名(相对路径或绝对路径)。

Public File (String path,String name):path是文件所在的文件目录,name是文件名。

Public File (String parent,String chile):parent是父目录;chile是文件名。

例如:

File file1=new File(”demo.txt”);//当前文件夹下的文件

File file2=new File(”c://demo1.txt”)://绝对路径

File file3=new File(“c:/exmple”);

File file4=new File(”c://example”,”demo.txt”);examples是目录名,demo.txt是文件名

File file5=new File(file3,”demo.txt”);

File file6=new File(file3,”test”);

静态常量:

由于不同操作系统的文件分隔符以及路径分隔符不同,因此,如果要获取当前系统的文件和路径的分隔符,可使用以下两个静态常量。

public static final char separatorChar;

public static final  String separator;

 

三、File 类提供的方法有:

1、访问文件对象:

Public String getName():只返回文件名,不包含路径。

Public String getPath():返回相对路径名,包含文件名。

Public String getAbsolutePath():返回绝对路径名,包含文件名。

Public String getParent():只返回路径,如果封装的是相对路径,则返回null。

Public File getParentFile():返回父文件对象。

2、获得文件属性:

Public long length():返回指定的文件的字节长度。

Public boolean exists():测试指定的文件是否存在。

Public long lastModified():返回指定文件最后被修改的时间。

3、文件操作

Public boolean renameTo(Filedest):文件重命名。

Public Boolean delete():删除空目录。

4、目录操作

Public boolean mkdir();创建制定目录,正常建立时返回true。

Public String[] list():返回目录中所有文件名字符串。

Public File[] listFile():返回制定目录中的所有文件对象。

实例,列出指定目录下的文件以及子文件夹中的文件。

分析:需要使用递归—方法自己调用自己。

注意:使用递归时,一定要有递归的终止条件,并且调用次数也不要过多,否则会出现内存溢出。

  public void listDir(File dir){

System.out.println(dir.getName());

File[] files=dir.listFiles();

for(int i=0;i<files.length;i++){

    if(files[i].isFile())

         System.out.println(files[i].getName());

    else

         listDir(files[i]);

}

}

改进:

public String getLevel(int level){

StringBuilder sb = new StringBuilder();

sb.append("|--");

for(int x=0; x<level; x++){

     sb.insert(0,"|  ");

}

return sb.toString();

}

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].isDirectory())//如果遍历到的是目录。

         listDir(files[x],level);//递归。

     else

         System.out.println(getLevel(level)+files[x].getName());

}

}

File类的自动更新操作主要的原理是:

Update(String fname,String destdir)方法;在当前目录中,以源文件fname自动更新目标目录destdir中的同名目标文件。更新原则以文件的修改日期为准,以最新日期的文件替换原有的过期文件。

Copy(File f1,File f2)方法:以文件字节流方式,将f1复制成f2.

ShowFileInfo(File f1)方法:获得文件对象f1的信息。

文件过滤器

FileFilter和FilenameFilter接口

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

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

FilenameFilter接口:实现此接口的类实例可用于过滤器文件名。Abstract Window Toolkit 的文件对话框组件使用这些实例过滤 File 类的 list 方法中的目录清单。

成员方法:boolean accept(File dir,String name)
测试指定文件是否应该包含在某一文件列表中。

例如:

import java.io.File;

import java.io.FileFilter;

public class ExtensionFileFilter implements FileFilter {

    private String extension;

    public ExtensionFileFilter(String extension) {

        this.extension = extension;

    }

    public boolean accept(File file) {

        if (file.isDirectory()) {

            return false;

        }

        String name = file.getName();

        // find the last

        int index = name.lastIndexOf(".");

        if (index == -1) {

            return false;

        } else if (index == name.length() - 1) {

            return false;

        } else {

            return this.extension.equals(name.substring(index + 1));

        }

    }

}

随机文件操作

RandomAccessFile类可以对文件进行随机读写操作。

构造方法—该对象只能对文件进行操作

RandomAccessFile(File file,String mode) ;

RandomAccessFile(String name,String mode);

例如:File   file=new  File(“d:\\mydata\\a.txt”);

RandomAccessFile  rf=new RandomAccessFile( file,”rw”) ;

RandomAccessFile rfile=new RandomAccessFile(“d:\\lx\\a.txt”,”rw”);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值