36、Java I/O系统

来源:互联网 发布:mac vmware 安装win7 编辑:程序博客网 时间:2024/04/30 11:10

对程序语言设计者来说,设计一个令人满意的I/O(输入输出)系统,是件极艰巨的任务——《Thinking in Java》

1、File类:一个File类的对象,表示了磁盘上的文件或目录;File类提供了与平台无关的方法来对磁盘上的文件或目录进行操作;File类直接处理文件和文件系统;File类没有指定信息怎样从文件读取和向文件存储;File类描述了文件本身的属性;File对象用来获取或处理与磁盘文件相关的信息,例如权限,时间,日期和目录路径;File类还可以浏览子目录层次结构。

      java.io包中的File类提供了与具体平台无关的方式描述目录和文件对象的属性功能。其中包含大量的方法可用来获取路径、目录和文件的相关信息,并对他们进行创建、删除、改名等管理工作。因为不同的系统平台,对文件路径的描述不尽相同。为做到平台无关,在Java语言中,使用抽象路径等概念。Java自动进行不同系统平台的文件路径描述与抽象文件路径之间的转换。File类的直接父类是Object类。

import java.io.File;import java.io.IOException;public class FileTest1{public static void main(String[] args){File file = new File("d:\\com");try{System.out.println(file.createNewFile());} catch (IOException e){e.printStackTrace();}}}


因为在java中“\”表示转义符,所以要想创建d:\com文件,路径中的“\”要写成“\\”,或者使用反斜线“/”,反斜线比较通用。

File类的构造方法:File(String directoryPath),File(String directoryPath, String filename),File(File dirObj, String filename);这里,directoryPath是文件的路径名,filename 是文件名,dirObj 是一个指定目录的File 对象

2、File的方法:isDirectory()、isFile()——判断是目录还是文件。创建目录mkDir(),mkDirs()——带s的方法,如果目录的父目录不存在,一并创建。publicString[]list()返回抽象路径名表示路径中的文件名和目录名(只是第一层)。

      在进行文件操作时,常需要知道一个关于文件的信息。Jave的File类提供了方法来操纵文件和获得一个文件的信息。另外,File类还可以对目录和文件进行删除、属性修改等管理工作,File 类定义了很多获取File对象标准属性的方法。例如getName()返回文件名,getParent()返回父目录名,exists()在文件存在的情况下返回true,反之返回false。然而File类是不对称的。说它不对称,意思是虽然存在允许验证一个简单文件对象属性的很多方法,但是没有相应的方法来改变这些属性。

File类中的其他常用方法:String getName()、String getPath()、String getAbsolutePath()、String getParent()、boolean renameTo( File newName)、long length()、boolean delete()、boolean mkdir()、String[] list()、boolean exists()、boolean canWrite()、boolean canRead()、boolean isFile()、boolean isDirectory()

3、目录是一个包含其他文件和路径列表的File 类,当你创建一个File 对象且它是目录时,isDirectory() 方法返回ture。这种情况下,可以调用该对象的list()方法来提取该目录内部其他文件和目录的列表。

import java.io.File;public class FileTest4{public static void main(String[] args){File file = new File("d:/j2sdk1.4.2_16");String[] names = file.list();for(String name : names){System.out.println(name);}System.out.println("----------------");File[] files = file.listFiles();for(File f : files){System.out.println(f.getName());System.out.println("父目录:" + f.getParent());}File file2 = new File("d:/ad/1.txt");file2.delete();}}

4、使用FilenameFilter:希望能够限制由list()方法返回的文件数目,使它仅返回那些与一定的文件名方式或者过滤(filter)相匹配的文件;为达到这样的目的,必须使用list()的第二种形式(方法重载)。String[ ] list(FilenameFilter  FFObj),该形式中,FFObj是一个实现FilenameFilter接口的类的对象

import java.io.File;import java.io.FilenameFilter;public class FileTest5{public static void main(String[] args){File file = new File("d:/ad");String[] names = file.list();for(String name : names){if(name.endsWith(".java")){System.out.println(name);}}System.out.println("---------");File file2 = new File("d:/ad");String[] names1 = file2.list(new FilenameFilter(){public boolean accept(File dir, String name){if(name.endsWith(".java")){return true; }return false;}});for(String name : names1){System.out.println(name);}}}


FilenameFilter仅定义了一个方法,accept()。该方法被列表中的每个文件调用一次。它的通常形式如下:boolean accept(File directory, String filename)
当被directory 指定的目录中的文件(也就是说,那些与filename 参数匹配的文件)包含在列表中时,accept()方法返回true ,当这些文件没有包括在列表中时,accept()返回false

5、递归(Recursion):就是方法调用自身。对于递归来说,一定有一个出口,让递归结束,只有这样才能保证不出现死循环。

public class Test1{//循环方式计算阶乘,又叫做迭代方式public int compute1(int number){int result = 1;for(int i = number;i> 0;i--){result *=i;}return result;}//使用递归方式计算阶乘public int compute(int number){if(1 == number){return 1;}else{return number * compute(number-1);}}public static void main(String[] args){Test1 test = new Test1();System.out.println(test.compute(5));System.out.println(test.compute1(5));}}


斐波那契数列:

public class Fabna{public int compute(int n){if(1 == n || 2 == n){return 1;}else{return compute(n-1) + compute(n-2);}}public static void main(String[] args){Fabna f = new Fabna();System.out.println(f.compute(9));}}


使用递归删除一个目录(File的delete方法只能删除一个空目录,如果不为空,要进入目录中,先删除其中内容)

import java.io.File;public class FileTest6{public static void deleteAll(File file){if(file.isFile() || 0 == file.list().length){file.delete();}else{File[] files = file.listFiles();for(File f : files){deleteAll(f);f.delete();}}}public static void main(String[] args){deleteAll(new File("d:/ad"));}}


 

原创粉丝点击