码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-01-04 22:56:47      阅读:262      评论:0      收藏:0      [点我收藏+]

标签:

第一讲  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");//后缀名为.java
18             }
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");//将文件封装后缀标准是ini
13         if(!file.exists())
14             file.createNewFile();
15         FileReader fr=new FileReadere(file);
16         prop.load(fr);
17         
18         int count;
19         String value=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

标签:

原文地址:http://www.cnblogs.com/shuiyinmeizi/p/4202334.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!