`
flm_llx
  • 浏览: 60256 次
  • 性别: Icon_minigender_1
  • 来自: 应县
社区版块
存档分类
最新评论

第十一章 文件管理—File类

    博客分类:
  • java
阅读更多
­

­

Java对于文件系统的操作和管理都是通过File类来实现的。一个File对象可以代表一个文件,也可以代表一个目录,甚至什么也不是(不存在)。创建了一个File对象后,如果是目录,可以显示目录清单,新建或删除目录;如果是文件,可以查询文件的属性和路径信息,也可以输出和改名,但没有拷贝功能。拷贝属于文件的读写,要用上一章的IO流类来解决。本章就介绍这一个类,它能够解决文件管理的所有问题。­

11.1 数据成员和构建器­

File类的数据成员主要有下列4个,它们都是类变量:­

static String pathSeparator   //";" 路径分隔符,如DOS环境变量PATH中用的分号­

static Char pathSeparatorChar //';' 路径分隔符,字符分号而不是字符串­

static String separator       //"\" 路径表达式中的分隔符,如WINDOWS系统中是反斜杠­

static Char separatorChar     //‘\’ 字符型的路径表达式中的分隔符(反斜杠)­

File类的构建器有3个­

public java.io.File(String pathname) ­

public java.io.File(String parent,String filename) ­

public java.io.File(File parent,String filename) ­

第一个构建器通过全路径—路径文件名来创建对象,pathname可以是绝对路径也可以是相对的。第二个构建器通过父目录和文件名来创建对象,filename是不含路径的文件名。第三个构建器也是通过父目录和文件名来创建对象,但父目录由一个File对象提供。­

例1 本例程演示用三种构建器创建File对象。­

///­

import java.io.*;­

class FileCons {­

  public static void main(String[] args) {­

try{­

   File f1 = new File("c:\\");­

    File f2 = new File("c:\\","windows");­

   File f3 = new File(f1,"sss.txt");­

   File f4 = new File("FileCons.java");­

   File f5 = new File("asdf+?12/");­

   System.out.println("Path of F1 is " + f2.getPath());­

   if (f3.exists())­

       System.out.println(f3 +" exists");­

   else {­

      f3.createNewFile();­

      System.out.println("F3 was created!");­

       }­

   } catch(java.io.IOException e) {­

      e.printStackTrace();­

   }­

  }­



/// ­

第一次运行结果:­

Path of F1 is c:\windows­

F3 was created!­

Path of F4 is C:\javacode\zcb\ch11\FileCons.java­

第二次运行结果:­

Path of F1 is c:\windows­

c:\sss.txt exists­

Path of F4 is C:\javacode\zcb\ch11\FileCons.java­

f4说明可以使用相对路径。f5的文件名字符串是非法的,这说明创建对象使4编译程序不分析文件名字符串的合法性,在运行时再掷出异常。­

11.2 显示目录清单­

显示目录清单用list方法,它有两种形式。一种是无参数的,它返回File对象的所有文件和子目录。另一个用过滤器参数,只返回符合条件的文件和子目录列表。­

String[] list()­

String[] list(FilenameFilter filter)­

例2 简单的目录列表,显示当前目录的父目录的清单。­

///­

import java.io.*;­

public class DirList {­

  public static void main(String args[]) {­

   File dir = new File("..");­

   String[] files = null;­

   if(dir.exists())­

      files = dir.list();­

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

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

  }­



要使用带过滤器的list方法,必须建立一个类—过滤器filter。这个类要使用FilenameFilter接口。形式如下:­

class DirFilter implements FilenameFilter {­

   String afn;­

   DirFilter(String afn) { this.afn = afn; }­

   public boolean accept(File dir, String name) {­

   // Strip path information:­

   String f = new File(name).getName();­

   return f.indexOf(afn) != -1;­

   }­



///­

构建器DirFilter(String afn),其中字符串afn就是过滤子,包含afn为子串的字符串就是符合条件的。­

例3 带过滤器的目录列表。显示当前目录清单中包含指定字符串的文件和目录。­

///­

import java.io.*;­

public class DirList1 {­

  public static void main(String[] args) {­

  try {File path = new File(".");­

   String[] list;­

   if(args.length == 0)­

       list = path.list();­

   else­

        list = path.list(new DirFilter(args[0]));­

   for(int i = 0; i < list.length; i++)­

      System.out.println(list[i]);­

   } catch(Exception e) {­

      e.printStackTrace();­

   }­

  }­



class DirFilter implements FilenameFilter { ...}­

///­

程序运行时在命令行输入过滤条件,例如要显示所有*.java文件,可用如下方法:­

  java DirList1 java <CR>­

下例用一个匿名内部类来重写例2。首先创建了一个filter()方法,它返回指向FilenameFilter的一个句柄,类体就在创建句柄的地方建立。 ­

///­

// DirList2.java­

import java.io.*;­

public class DirList2 {­

  public static FilenameFilter ­

  filter(final String afn) {­

    // Creation of anonymous inner class:­

    return new FilenameFilter() {­

      String fn = afn;­

      public boolean accept(File dir, String n) {­

        // Strip path information:­

        String f = new File(n).getName();­

        return f.indexOf(fn) != -1;­

      }­

    }; // End of anonymous inner class­

  }­

  public static void main(String[] args) {­

    try {­

      File path = new File(".");­

      String[] list;­

      if(args.length == 0)­

        list = path.list();­

      else ­

        list = path.list(filter(args[0]));­

      for(int i = 0; i < list.length; i++)­

        System.out.println(list[i]);­

    } catch(Exception e) {­

      e.printStackTrace();­

    }­

  }­



/// ­

利用过滤器筛选文件清单­

筛选目录中的文件清单用listFiles方法,它返回的是File类型的对象数组。语法形式与list方法类似,不过它使用了两种过滤器—文件名过滤器和文件过滤器作为参数。这三个方法是:­

File[] listFiles()­

File[] listFiles(FilenameFilter)­

File[] listFiles(FileFilter)­

例3 显示任意目录的子目录(或文件)清单,任意目录从命令行输入,缺省为当前目录。­

///­

import java.io.*;­

public class DirList3 {­

  public static void main(String args[]){­

   File dir ;­

   dir = new File(args.length == 0? "." : args[0] );­

   File[] files = null;­

   if(dir.exists())­

        files = dir.listFiles();­

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

        if(files[i].isDirectory()) // OR isFile()­

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

  }­



///­

例如运行:DirList3 c:\ ,就显示C盘根目录的所有子目录。把isDirectory()改为isFile(),就显示文件而不包含子目录。请有不同的目录名运行本程序,包括相对路径"..",".","\"等相对路径。我们可以通过在命令行上增加一个选项(-d , -f, -a)的方法,使程序能够兼顾显示目录、文件和全部。这个题目留给读者自己来完成。­

由于现在用命令行参数使得例程越来越灵活,而且运行结果依赖于硬盘上具体的文件系统,所以运行的输出结果对读者没有参考价值,所以不再列出了。以后在没有不确定性的情况下还会列出的。­

listFiles方法的第二个用法可参考例2。下面介绍第三个方法——使用文件过滤器。­

例4 本例程演示listFiles(FileFilter)方法。­

///­

import java.io.*;­

  public class DirList4 {­

   public static void main(String[] args) {­

   try {­

       File path = new File(".");­

      File[] list;­

       list = path.listFiles(new Filter("java"));­

      for(int i = 0; i < list.length; i++)­

           System.out.println(list[i]);­

   } catch(Exception e) {­

      e.printStackTrace();­

   }­

  }­



class Filter implements FileFilter {­

   File f;­

   String sf;­

   Filter(String filter) {­

   this.sf = filter;­

   }­

   public boolean accept(File f) {­

     String s = f.getName();­

     return s.indexOf(sf) != -1 ;­





///­

本例程显示当前目录中的所用*.java文件。也可以用它过滤目录名或文件名。例如把过滤子改为如下形状:­

class Filter implements FileFilter {­

   File f;­

   Filter() { }­

   public boolean accept(File f) {­

    return f.Directory() ;­





accept方法体可以复杂化,因此利用文件过滤器可以创建更为复杂的过滤条件。­

11.3 创建和删除­

利用File对象可以很方便地创建和删除目录,也可以创建一个空文件和删除文件。这些方法都返回boolean值以告知操作是否成功。方法列表如下:­

boolean mkdir()          创建一个新目录­

boolean createNewFile()  创建一个新的空文件­

boolean delete()         删除一个空目录或文件­

boolean renameTo(File)   目录或文件改名­

如果要删除的目录非空,就掷出一个IO异常。如果要删除的文件或目录不存在则不吱声。如果要创建的空文件名已经存在,也掷出异常。下面的例程演示创建工作。­

例5 创建一个“根目录”九个子目录,并在每个子目录中创建一个空文件。­

///­

import java.io.*;­

class DirCreate {­

  public static void main(String[] args) {­

   File root = new File("c:\\root$dir");­

    File[] dirs = new File[10];­

   File[] fs = new File[10];­

   try{­

   if (!root.exists()) root.mkdir();­

   for (int i=1; i<10;i++) {­

       dirs[i] = new File(root, "Dir" + String.valueOf(i));­

      dirs[i].mkdir();­

      fs[i] = new File(dirs[i],"file" + String.valueOf(i));­

      fs[i].createNewFile();­

   }­

   } catch(IOException e) {­

      e.printStackTrace();­

   }­

  }­



///­

执行完后请观看结果。然后执行下面的删除程序。­

例6 删除上例建立的所有子目录和文件,留下”根目录“并改名。­

///­

import java.io.*;­

class DirDelete {­

  public static void main(String[] args) {­

   File root = new File("c:\\root$dir");­

    File[] dirs = new File[10];­

   File[] fs = new File[10];­

   for (int i=1; i<10;i++) {­

      dirs[i] = new File(root, "Dir" + String.valueOf(i));­

     fs[i] = new File(dirs[i],"file" + String.valueOf(i));­

     fs[i].delete();­

     dirs[i].delete();­

   }­

   File r = new File("c:\\root$$$");­

    root.renameTo(r);­

   }­





///­

11.4 文件属性测试­

File类提供了许多方法给出File对象所对应的文件的各种属性。其中一类是判断性的,大多数无参数都返回boolean值。这些方法有:­

canRead()        可读否?­

canWrite()       可写否? ­

exists()         File对象存在吗?­

isDirectory()    是目录吗?­

isFile()         是文件吗?­

isAbsolute()     有File(parent, filename)构建器创建对象时给出的是绝对路径吗?    ­

isHidden()       是隐含文件吗? ­

SetReadOnly()    是只读文件吗?­

另一类返回字符串,如文件名和路径等。它们有:­

getName()      不含路径的文件名­

getPath()      路径文件名­

getParent()    父目录名­

getAbsolute()  返回绝对路径­

toString()     返回File对象的信息­

最后还有几个方法是:­

long length()          返回文件程度(字节数)­

long lastModified()    返回文件的最后修改时间­

int compareTo(File f)  比较两个File对象,而不是比较文件内容  ­

boolean equals(Object o)  自Object类继承而来的方法­

下面我们有一个程序来演示所有这些方法的用法。­

例7 测试或获取文件属性信息。­

///­

import java.io.*;­

import java.util.Date;­

public class File1Properties {­

  static void printProperty(File file) {­

   System.out.println("Name: " + file.getName());­

   System.out.println("Path: " + file.getPath());­

   System.out.println("Parent: " + file.getParent());­

   System.out.println("Can read? " + file.canRead());­

   System.out.println("Can write? " + file.canWrite());­

   System.out.println("Is hidden? " + file.isHidden());­

   System.out.println("Is readonly? " + file.setReadOnly());­

   System.out.println("Length: " + file.length());­

   Date date = new Date(file.lastModified());­

   System.out.println("Iast modified: " + date.toString());­

   System.out.println();­

   System.out.println("Is Absolute? " + file.isAbsolute());­

   System.out.println("AbsolutePath: " + file.getAbsolutePath());­

   }­

public static void main(String args[]){­

   if(args.length ==0) {­

   System.out.println("Usage: File1Properties <filename>");­

   System.exit(0);­

   }­

   File f = new File(args[0]);­

   if(!f.exists())­

       System.out.println(f.toString() +" not exists!");­

   else {­

      if(f.isDirectory())­

           System.out.println("This is a directory");­

      else­

           [ft=#000­
分享到:
评论

相关推荐

    13.第十三章 文件.txt

    第十三章 文件 对数据的管理无论是用数组还是链表,都是存储在内存中的,程序结束后都会丢失,下一次运行程序时,要重新输入或运算生成数据。要把程序运行的数据保存起来以便下次运行继续使用,在计算机中持久保存...

    JSP动态网页制作基础培训教程源代码.rar

    此部分是指第10章(表10)和第11章(表11)的内容,包含实例的后台数据库建立和初始化脚本,以及实例的页面代码等,下面分别介绍。 第10章源代码使用说明 操作步骤如下: 1.建立后台SQL Server数据库。读者应该...

    决战Nginx系统卷:高性能Web服务器详解与运维第二部分(保证能用)

    第11章 限制流量 第12章 限制用户并发连接数 第13章 修改或隐藏Nginx的版本号 第14章 配置FLV服务器 第15章 Nginx的访问控制 第16章 提供FTP下载 第17章 Nginx与编码 第18章 网页压缩传输 第19章 控制Nginx...

    决战Nginx: 系统卷 - 高性能Web服务器详解与运维第三部分(保证能用)

    第11章 限制流量 第12章 限制用户并发连接数 第13章 修改或隐藏Nginx的版本号 第14章 配置FLV服务器 第15章 Nginx的访问控制 第16章 提供FTP下载 第17章 Nginx与编码 第18章 网页压缩传输 第19章 控制Nginx...

    决战Nginx系统卷:高性能Web服务器详解与运维第一部分(保证能用)

    第11章 限制流量 第12章 限制用户并发连接数 第13章 修改或隐藏Nginx的版本号 第14章 配置FLV服务器 第15章 Nginx的访问控制 第16章 提供FTP下载 第17章 Nginx与编码 第18章 网页压缩传输 第19章 控制Nginx...

    《Linux服务器配置与管理》教学课件—第-11-章--MySQL-服务器配置.pptx

    第11章 邮件服务器配置 《Linux服务器配置与管理》教学课件—第-11-章--MySQL-服务器配置全文共59页,当前为第1页。 目录 11.6 数据库的备份与恢复 11.7 任务实战 11.5 MySQL 基本使用 11.4 MySQL 客户端 11.2 MySQL...

    juniper防火墙实用手册.zip

    1.1.9第十一章:系统参数 1.2第三卷:管理 1.2.1第一章:管理 1.2.2监控NetScreen 设备 1.3第八卷:高可用性 1.3.1NSRP5 1.3.2故障切换6 2Juniper防火墙初始化配置和操纵 3查看系统概要信息 4主菜单常用配置选项导航...

    AIX系统管理

    第 14 章 文件系统管理 128 14.1 基本概念 128 14.1.1 日志文件系统的结构 128 14.1.2 inode节点结构 128 14.1.3 磁盘分段(fragmentation) 129 14.1.4 inode节点的数目 130 14.1.5 文件系统压缩 130 14.1.6 JFS...

    边干边学Linux__第二版_doc格式

    第11章 进程创建 11.1 进程是什么 11.2 进程的产生 11.3 进程的消亡 / 退出 11.4 实验1 11.5 实验2 11.6 实验3 第12章 /proc文件系统 12.1 /proc文件系统 12.2 现有proc文件系统中各个文件的含义 12.3 怎样使用/proc...

    Java开发详解.zip

    031106_【第11章:Java常用类库】_日期操作类(DateFormat、SimpleDateFormat)笔记.pdf 031107_〖第11章:Java常用类库〗_实例操作:取得当前日期笔记.pdf 031108_【第11章:Java常用类库】_Math与Random类笔记.pdf...

    疯狂Android讲义(第2版)源代码 第6章~第9章

    第11章、多媒体应用开发 11.1、音频和视频的播放:MediaPlayer; SoundPool; VideoView; 11.2、使用MediaRecorder录制音频: 11.3、控制摄像头拍照:Camera; 第12章、OpenGL与3D应用开发 12.2、OpenGL ES基础: ...

    计算机应用基础第二章Windows7操作系统试题.doc

    第二章 Windows 7操作系统 一、选择题 1.Windows7系统中的"桌面"是指( )。 A.整个频幕 B.某个窗口 C.当前窗口 D.全部窗口 2.下列属于计算机操作系统的是( )。 A.Windows 7 B.Linux C.UNIX D.以上全部 3.在...

    精通LINUX下的C编程(配套光盘)第三部分

    第1章 Linux基础知识. 1.1 Linux简介 1.2 Linux的安装 1.3 Linux系统的常用命令 1.4 小结 习题 第2章 Linux下的C语言编程环境...第11章 飞机票网络售票系统 11.1 系统框架 11.2 程序源代码和说明 11.3 小结...

    sco-unix操作维护手册

    第11章 常见故障解决方法……………………………………………76 1./unix not found 2./boot not found 3.设备文件丢失怎么办? 4.inittab 丢失或破坏而导致不能启动多用户 第12章 UNIX5.0的特点…………...

    C语言程序设计标准教程

    在操作系统中,把外部设备也看作是一个文件来进行管理,把它们的输入、输出等同于对磁盘文件的读和写。 通常把显示器定义为标准输出文件, 一般情况下在屏幕上显示有关信息就是向标准输出文件输出。如前面经常使用的...

    IBM_AIX RS/6000培训教材

    第十一章 用户管理 55 11.1 与用户管理相关的重要系统文件 55 11.1.1 /etc/passwd 55 11.1.2 /etc/security/passwd 55 11.1.3 /usr/lib/security/mkuser.default 55 11.1.4 /etc/group 55 11.1.5 /etc/security/...

    Visual C++ 6.0编程实例详解.part2

    第11章 常用MFC类 11.1 数组类 11.1.1 CArray 11.1.2 其他数组类 11.2 链表类 11.3 CPont类 11.4 CRect类 11.5 CSize类 11.6 CString类 11. 7 CTirne类 11.8 CTimeSpan类 第12章 MFC 12.1 ...

    Visual C++ 6.0编程实例详解.part1

    第11章 常用MFC类 11.1 数组类 11.1.1 CArray 11.1.2 其他数组类 11.2 链表类 11.3 CPont类 11.4 CRect类 11.5 CSize类 11.6 CString类 11. 7 CTirne类 11.8 CTimeSpan类 第12章 MFC 12.1 ...

    Linux kernel pdf 每一行都完全注释-初学者必备

    第11 章 包含文件(INCLUDE) 393 111 概述 393 112 INCLUDE/目录下的文件 393 113 AOUTH 文件 393 114 CONSTH 文件 402 115 CTYPEH 文件 402 116 ERRNOH 文件 403 117 FCNTLH 文件 405 118 SIGNALH 文件 407 119 ...

Global site tag (gtag.js) - Google Analytics