首页 > 代码库 > 黑马程序员——Java基础——IO流(2)——File

黑马程序员——Java基础——IO流(2)——File

第一讲  File类

1、概念:

  File类对象可以对比一个路径,此路径可以是文件也乐意是文件夹,该类方法可以对这个路径进行各种操作

2、创建对象:

  给File类构造函数传递一个String类型的路径可以创建对象

  路径分为两种:相对路径和绝对路径

    *相对路径:从盘符开始,是一个固定的路径

    *绝对路径:不从盘符开始,相对于某个位置开始,日在Eclipse中的java工厂如果使用相对路径,那么就相当于工程根目录,cmd则相对应与当前目录

实例:

 1 //        法1 2         File f=new File("t.txt"); 3 //        与这个路径相关联,假如没有该文件也不会创建 4 //        法2 5         File f2=new File("D:\\aa","b.txt"); 6 //        前面参数数目录路径,后面是文件名 7 //        法3 8         File d=new File("D:\\pp"); 9         File f3=new File(d,"c.txt");10 //        注:跨平台的分割符,File.sparator

3.File的常用方法:

 1      boolean  createNewFile():创建一个文件,存在测返回false 2         boolean  mkdie():创建一个文件夹,最多一级 3         boolean  mkdies():创建一个文件夹,可以多级 4          5         boolean delete():删除 6          7          8         ******boolean exists():判断是否存在 9         boolean isAbsulute();  是否是绝对路径10         boolean isDirectory(); 是否是文件夹11         boolean isFile();      是否是文件12         boolean isHidden();    是否隐藏13 //        记住:在判断文件对象是否是文件或目录是,必须先判断是否存在(使用exists)14         15         String getName():获得文件名16         String getPath:获得相对路径17         String Parent()获得文件父目录18         String getAbsolutely();获得绝对路径19         long length():获得文件长度20         21         22         重点掌握:23         String[] list():列出当前所以文件,得到这些文件的数组24         String[] list(FilenameFilter filter)25         返回一个字符串数组,获得目录中满足过滤器的文件或目录26         27          File[] listFiles()28         String[] ListFile(FilenameFilter filter)返回抽象路径数组,获取满足目录中指定过滤器的文件或目录

 

4、文件过来器用法:(关键字:list ,FilenameFilter(),复写accept(file,name),endwith(String))

 1 /*练习:用String[] list(filenameFilter filter)方法获取一个目录下所有的.java文件 2  * 思路:1、FilenameFilter是一个过滤器接口,用匿名内部类传入filter对象 3  *     2、复写accept(file,name)方法,判断name是否为java 4  *        3、变量String 5  */ 6 import java.io.*; 7 public class getJavaFile { 8     public static void main(String[] args){ 9         File file=new File("F:");10         getJavaFiel(file);11     }12 //获得hava文件13     private static void getJavaFiel(File file) {14         String[] javaFile=file.list(new FilenameFilter(){15 //            复写accept参数是需要变量的文件,和名字16             public boolean accept(File file,String name){17                 return name.endsWith(".java");//后缀名为.java18             }19         });20         System.out.println(javaFile.length);21 //        遍历数组22         for(String s:javaFile){23             System.out.println(s);24         }25     }26 }

 

5、结合递归方法列出指定目录下问价或文件夹

 1 import java.io.*; 2 public class recursDemo { 3     public static void main(String[] args){ 4         File dir=new File("D:\\media"); 5      6         allFileList(dir,0); 7     } 8 //    列出指定目录下的所有内容 9     private static void allFileList(File dir, int i) {10 //        i主要是为了确定在哪一级的目录11 //        根据i的值有层次的输出12         System.out.println(getLevel(i)+dir);13         i++;14 //        获得所有路径15         File[] fileAll=dir.listFiles();16 //        遍历17         for(File file:fileAll){18             if(file.isDirectory()){19 //                如果是目录说明还需要继续调用20                 allFileList(file,i);21             }else{22                 System.out.println(getLevel(i)+file);23             }24             25         }26     }27     28 //    根据i的大小确定多少级29       private static String getLevel(int i) {30               StringBuilder sb=new StringBuilder();31               sb.append("|){33                   sb.insert(0, ""+dir.delete());20     }21 }

 

实例3:

将指定目录下java文件的绝对路径存储在疑问文本文件上

  1、对指定的目录进行递归

  2、获得java文件的路径

  3、将路径存储在集合

  4、将集合中的数据写入一个文件中

 1 /* 2  * 删除文件是由内而外的,所以需要用递归 3  */ 4 import java.io.*; 5 import java.util.*; 6 public class RemoveDir { 7     public static void main(String[] args)throws Exception{ 8            File dir=new File("D:\\java源码");     9            10 //        用于存储的集合容器11            List<File> list =new ArrayList<File>(); 12            fileToList(dir,list);13 //        使得list装满了路径文件14            File file=new File(dir,"javafilelist.txt"); ; 15            writeToFile(list,file);16     }17 //    获取指定文件夹内的所有java文件的绝对路径,并存入集合中  18   public static void fileToList(File dir,List<File> list)  19   {  20       File[] files=dir.listFiles();//列出dir路径下的所以文件和目录,  21       //遍历  22       for (File file : files)  23       {  24           //如果是目录,则继续获取  25           if(file.isDirectory())  26           {  27               list.add(file.getAbsoluteFile());//把父目录路径也存入  28               fileToList(file,list);  29           }  30           //将是.java文件的绝对路径存入  31           else if(file.getName().endsWith(".java"))  32               list.add(file);  33       }  34   }  35     public static void writeTolist(List<File> list,File fi)throws Exception{36 37         BufferedWriter bufw=new BufferedWriter(new FileWriter(fi));38         for(File f:list){//注意集合时可以直接39             bufw.write(fi.getAbsolutePath());40             bufw.newLine();41             bufw.flush();42         }43         bufw.close();44     }45 46 }

 

 

 

第二讲  Properties

一、概述:

  Properties是Hashtable的子类,它具备Map集合的特点

特点:

  用于键值对形式的配置文件;加载时的固定格式是:key=value

1)常用方法

setProperyy(K,V):设置键值
getProperty(K):由键的值

Set<String> stringPropertyName();返回键值集合

重点难点:加载流和存入流

  void load(InputStream is,)

  //从输入字节流中读取属性列表(键和值)

  void load(Reader reader)

  //从字符流中读取属性列表(键和值)

   void list(PrintStream out)将属性列表红素出道指定的流中

  void store(OutputSstream out,String s):

  对应load(InputStream)将属性列表希尔输出流

实例

演示把文件中数据存储到Properties集合中(关键使用String 方法中split将=切开为arr[0]和arr[1],在分别存入Properties)

        public static void method()throws Exception  {          //使用字符读取缓冲流关联文件          BufferedReader bufr = new BufferedReader(new FileReader("info.txt"));          String line = null;          //定义Properties集合          Properties prop = new Properties();              while((line=bufr.readLine())!=null) {              String[] arr = line.split("=");//将一行数据以“=”号进行分割              //将=左边作为键存入,将=右边作为值存入              prop.setProperty(arr[0],arr[1]);              }              bufr.close();//关流              System.out.println(prop);          }  

其实是load的原理,其实直接使用load加载以流作为参数就行了~

Properties prop=new Properties(new FileInputStream("info.txt"))

实例:

用于记录应用程序的使用次数,次数到了之后就给提示;

思路:

1、用读取流管理文本信息文件。如果存在则读取,不存在则创建

2、每次运行,将文件数据存入集合中,读值,判断次数,如果小于5次,则此时增加一次

3、将增加的东东存入配置文件中;

 1         int count=runCount();   2         if(count>5)//如果程序被使用了超过5次,则终止使用,并提示   3         {   4             System.out.println("次数到了,交钱!!!!!");   5             return ;   6         }   7         else   8             System.out.println("程序第"+count+"次Run!");   9     }  10     public static int runCount()throws Exception{11         Properties prop=new Properties();12         File file=new File("info.ini");//将文件封装后缀标准是ini13         if(!file.exists())14             file.createNewFile();15         FileReader fr=new FileReadere(file);16         prop.load(fr);17         18         int count;19         String value=http://www.mamicode.com/prop.getProperty("time");20         if(value!=null){21             count=Integer.parseInt(value);22         }23         count++;24         prop.setProperty("time",count+"");25         26         FileWriter fw=new FileWriter(file);27         prop.store(fw, "注释");28         29         fw.close();30         fr.close();31         32         return count;33         34     }

 

 

第三讲  打印流

打印流好处就是不用newline和flush

//键盘录入并使用PrintWriter谢茹文件BufferedReader bufr=new BufferedReader(new InputStream(System.in));PrintWriter pw=new PrintWriter(new FileWriter("pp.txt"),ture);//true代表自动刷新String line=null;while((line=bufr.readerLine())!=null){    if(line.equals("over")){        break;    }    out.println(line.toUpperCase());}bufr.close();pw.close();

第四讲  序列流

常用的步骤

1、创建集合,将流对象添加

2、创建Enumeration对象,将集合元素加入

3、常见SequenceInputStream对象,合并流对象

4、创建写入流对象,FileOutputStream关联写入文件

5、利用SequenceInputStream对象和FileOutputStrean 对象进行反复读写

 

将文件放在集合,通过集合创建枚举对象,把枚举对象作为参数传入合并流作为读取;

在关联一个写入文件流,做反复读写

 

黑马程序员——Java基础——IO流(2)——File