黑马程序员——java之IO体系中File类、编码问题、对象序列化

------------android培训java培训、期待与您交流! -------------


知识点总结

1、File类的由来、三种常见的构造方法。

文件也有自己对应的属性信息,比如所在目录、文件类型、大小、建立修改日期。Java通过面向对象的方法对其进行封装,方便对其进行操作。

File(String pathname)

File(File parent ,String child)

File(String parent,String child)

2、File的几种操作方法:创建、判断、删除、获取信息。

1,创建。

boolean createNewFile():在指定位置创建文件,如果该文件已经存在,则不创建,返回false。和输出流不一样,输出流对象一建立创建文件。而且文件已经存在,会覆盖。

boolean mkdir():创建文件夹。

boolean mkdirs():创建多级文件夹。

2,删除。

boolean delete():删除失败返回false。如果文件正在被使用,则删除不了返回falsel

void deleteOnExit();在程序退出时删除指定文件。解决了在占用文件时删除不  了的问题。

3,判断。

boolean exists() :文件是否存在.非常常用。

isFile():【注意】:在判断文件对象是否是文件或者目录时,

           亦一般要先通过exists先判断文件对象封装内容是否存在。

isDirectory();

isHidden();

isAbsolute();

4,获取信息。

getName():

getPath():

getParent()://只要没有明确指定父目录,返回为空;

                否则返回文件的父目录(上级目录

String getAbsolutePath();//返回绝对路径,字符串类型  

    File getAbosoluteFile();返回对象 

long lastModified() //返回最近一次修改时间

long length() //返回该文件的长度

5.设置

public boolean renameTo(File dest)  

重新命名此抽象路径名表示的文件。

可以将文件从一个目录转移到另一个目录。  

但是,重命名操作无法将一个文件从一个文件系统移动到另一个文件系统,  

该操作不是不可分的,如果已经存在具有目标抽象路径名的文件,那么该操作可  能无法获得成功。应该始终检查返回值,以确保重命名操作成功。

6、列出内容:public String[]list();  只传入实现FileNameFilter接口的对象

   列出内容:public File[]listFiles(),既可以传入FileNameFilter,又可以传FileFilter

    FileNameFilter  中只有 booleanaccept(File dir, String name) 方法

              测试指定文件是否应该包含在某一文件列表中。

FileFilter       中只有    booleanaccept(File pathname) 

        测试指定抽象路径名是否应该包含在某个路径名列表中。

 

[java]  view plain copy print ?
  1. 示例代码:  
  2.     public class FileDemo2 {  
  3.   
  4.     /** 
  5.      * @param args 
  6.      */  
  7.     public static void main(String[] args) {  
  8.         // TODO Auto-generated method stub  
  9.           
  10.         listDemo();  
  11.         listDemo1();  
  12.         listDemo_2();  
  13.     }  
  14.     public static void listDemo()  
  15.     {  
  16.         File f = new File("D:\\JAVA\\code");  
  17.   
  18.         String[] names = f.list();//调用list方法的file对象必须是封装了一个目录。该目录还必须存在。  
  19.         for(String name : names)  
  20.         {  
  21.             System.out.println(name);  
  22.         }  
  23.     }  
  24.     public static void listDemo_2()  
  25.     {  
  26.         File dir = new File("d:\\java\\code");  
  27.   
  28.         String[] arr = dir.list(new FilenameFilter()  
  29.         {  
  30.             public boolean accept(File dir,String name)  
  31.             {  
  32.                 return name.endsWith(".java");  
  33.   
  34.             }  
  35.         });  
  36.           
  37.         System.out.println("len:"+arr.length);  
  38.         for(String name : arr)  
  39.         {  
  40.             System.out.println(name);  
  41.         }  
  42.     }  
  43.   
  44.     public static void listDemo1(){  
  45.         File dir = new File("d:\\java\\code");  
  46.         File [] arr = dir.listFiles(new FilenameFilter(){  
  47.             public boolean accept(File dir,String name){  
  48.                 return name.endsWith(".java");  
  49.             }  
  50.         });  
  51.         for(File f :arr){  
  52.               
  53.             Print.sop(f);  
  54.               
  55.         }  
  56.     }   
  57.   
  58. }  


 

3、列出指定目录下文件或者文件夹,包含子目录中的内容。

也就是列出指定目录下所有内容。

因为目录中还有目录,只要使用同一个列出目录功能的函数完成即可。

在列出过程中出现的还是目录的话,还可以再次调用本功能。

也就是函数自身调用自身。

这种表现形式,或者编程手法,称为递归。

递归要注意:

1,限定条件。

2,要注意递归的次数。尽量避免内存溢出。

 

[java]  view plain copy print ?
  1. public class ListFileDemo {  
  2.   
  3.     /** 
  4.      * @param args 
  5.      */  
  6.     public static void main(String[] args) {  
  7.         // TODO Auto-generated method stub  
  8.         File f = new File("d:"+File.separator+"java");  
  9.         getFile(f,0);  
  10.     }  
  11.       
  12.     public static void getFile(File f,int level){  
  13.         if(!f.exists())//先判断文件或目录是否存在  
  14.             new IOException("找不到文件");  
  15.         if(f.isDirectory()){ //判断是不是目录  
  16.             File[] files = f.listFiles();//是就获取目录下的文件  
  17.             for(File f1 : files){             
  18.                 if(f1.isDirectory()){ //在循环目录的过程中判断是否还是目录,是                                      //的话递归调用本方法  
  19.                     level++;  
  20.                     getFile(f1,level);  
  21.                     }     
  22.                System.out.println(getLevel(level)+f1);//不是目录就打印  
  23.                   
  24.             }  
  25.   
  26.         }  
  27.         System.out.println(getLevel(level)+f);//不是目录就打印  
  28.           
  29.     }  
  30.     //获取层级目录,打印出层次效果,毕老师想的,牛!  
  31.     public static String getLevel(int level){  
  32.         StringBuilder sb = new StringBuilder();  
  33.         sb.append("|--");  
  34.          for(int x =0; x<level; x++)    
  35.             {                       
  36.                 sb.insert(0,"|  ");    
  37.             }    
  38.             return sb.toString();    
  39.     }  
  40.   
  41. }  

 

4、删除一个带内容的目录

[java]  view plain copy print ?
  1. /*  
  2. 删除一个带内容的目录。  
  3. 删除原理:  
  4. 在window中,删除目录从里边往外面删除的。  
  5. 既然是从里边往外删除,就需要用到递归。  
  6. */    
  7. import java.io.*;    
  8. class RemoveDir     
  9. {    
  10.     public static void main(String[] args)     
  11.     {    
  12.         File dir =new File("b:\\bxd");    
  13.         removeDir(dir);    
  14.     }    
  15.     //java删除是不走回收站的    
  16.     public static void removeDir(File dir)    
  17.     {    
  18.         File[] files =dir.listFiles();    
  19.         //删除目录中的内容    
  20.         for(int x =0; x<files.length; x++)    
  21.         {    
  22.             //java不能访问隐藏文件,所以遍历的时候最好判断下                     //(!files[x].isHidden())&&files[x].isDirectory()    
  23.             if(files[x].isDirectory())    
  24.                 removeDir(files[x]);    
  25.             else    
  26.                 sop(files[x]+":-file-:"+files[x].delete());    
  27.     
  28.         }     
  29.         //删除目录    
  30.         sop(dir+"::del::"+dir.delete());    
  31.     }    
  32.     public static void sop(Object obj)    
  33.     {    
  34.         System.out.println(obj);    
  35.     }    
  36. }    

5、打印流:

该流提供了打印方法,可以将各种数据类型的数据都原样打印。

字节打印流:

PrintStream

构造函数可以接收的参数类型:

1,file对象。File

2,字符串路径。String

3,字节输出流。OutputStream

字符打印流:

PrintWriter

构造函数可以接收的参数类型:

1,file对象。File

2,字符串路径。String

3,字节输出流。OutputStream

4,字符输出流,Writer

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值