36、Java I/O系统

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

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

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

[java] view plain copy print ?
  1. import java.io.File; 
  2. import java.io.IOException; 
  3.  
  4. public class FileTest1 
  5.     public static void main(String[] args) 
  6.     { 
  7.         File file = new File("d:\\com"); 
  8.         try 
  9.         { 
  10.             System.out.println(file.createNewFile()); 
  11.         } catch (IOException e) 
  12.         { 
  13.             e.printStackTrace(); 
  14.         } 
  15.     } 


因为在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()方法来提取该目录内部其他文件和目录的列表。

[java] view plain copy print ?
  1. import java.io.File; 
  2.  
  3. public class FileTest4 
  4.     public static void main(String[] args) 
  5.     { 
  6.         File file = new File("d:/j2sdk1.4.2_16"); 
  7.      
  8.         String[] names = file.list(); 
  9.      
  10.         for(String name : names) 
  11.         { 
  12.             System.out.println(name); 
  13.         } 
  14.         System.out.println("----------------"); 
  15.          
  16.         File[] files = file.listFiles(); 
  17.          
  18.         for(File f : files) 
  19.         { 
  20.             System.out.println(f.getName()); 
  21.             System.out.println("父目录:" + f.getParent()); 
  22.         } 
  23.          
  24.         File file2 = new File("d:/ad/1.txt"); 
  25.         file2.delete(); 
  26.     } 

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

[java] view plain copy print ?
  1. import java.io.File; 
  2. import java.io.FilenameFilter; 
  3.  
  4. public class FileTest5 
  5.     public static void main(String[] args) 
  6.     { 
  7.         File file = new File("d:/ad"); 
  8.          
  9.         String[] names = file.list(); 
  10.          
  11.         for(String name : names) 
  12.         { 
  13.             if(name.endsWith(".java")) 
  14.             { 
  15.                 System.out.println(name); 
  16.             } 
  17.         } 
  18.         System.out.println("---------"); 
  19.         File file2 = new File("d:/ad"); 
  20.         String[] names1 = file2.list(new FilenameFilter() 
  21.         { 
  22.             public boolean accept(File dir, String name) 
  23.             { 
  24.                 if(name.endsWith(".java")) 
  25.                 { 
  26.                     return true;  
  27.                 } 
  28.                 return false
  29.             } 
  30.         }); 
  31.          
  32.         for(String name : names1) 
  33.         { 
  34.             System.out.println(name); 
  35.         } 
  36.     } 


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

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

[java] view plain copy print ?
  1. public class Test1 
  2.     //循环方式计算阶乘,又叫做迭代方式 
  3.     public int compute1(int number) 
  4.     { 
  5.         int result = 1
  6.         for(int i = number;i> 0;i--) 
  7.         { 
  8.             result *=i; 
  9.         } 
  10.         return result; 
  11.     } 
  12.     //使用递归方式计算阶乘 
  13.     public int compute(int number) 
  14.     { 
  15.         if(1 == number) 
  16.         { 
  17.             return 1
  18.         } 
  19.         else 
  20.         { 
  21.             return number * compute(number-1); 
  22.         } 
  23.     } 
  24.     public static void main(String[] args) 
  25.     { 
  26.         Test1 test = new Test1(); 
  27.          
  28.         System.out.println(test.compute(5)); 
  29.         System.out.println(test.compute1(5)); 
  30.     } 


斐波那契数列:

[java] view plain copy print ?
  1. public class Fabna 
  2.     public int compute(int n) 
  3.     { 
  4.         if(1 == n || 2 == n) 
  5.         { 
  6.             return 1
  7.         } 
  8.         else 
  9.         { 
  10.             return compute(n-1) + compute(n-2); 
  11.         } 
  12.     } 
  13.     public static void main(String[] args) 
  14.     { 
  15.         Fabna f = new Fabna(); 
  16.         System.out.println(f.compute(9)); 
  17.     } 


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

[java] view plain copy print ?
  1. import java.io.File; 
  2.  
  3. public class FileTest6 
  4.     public static void deleteAll(File file) 
  5.     { 
  6.         if(file.isFile() || 0 == file.list().length) 
  7.         { 
  8.             file.delete(); 
  9.         } 
  10.         else 
  11.         { 
  12.             File[] files = file.listFiles(); 
  13.             for(File f : files) 
  14.             { 
  15.                 deleteAll(f); 
  16.                 f.delete(); 
  17.             } 
  18.         } 
  19.     } 
  20.     public static void main(String[] args) 
  21.     { 
  22.         deleteAll(new File("d:/ad")); 
  23.     } 

你可能感兴趣的:(java开发工具)