黑马程序员-基础-IO流-(Properties,打印流,合并流)

来源:互联网 发布:华为删除内置软件 编辑:程序博客网 时间:2024/04/29 20:28

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



  Properties 类

一、概述:

1、Properties是Hashtable的子类,它具备Map集合的特点,而且它里面还有存储的键值对,都是字符串,无泛型定义。是集合中和IO技术想结合的集合容器。

2、特点:

1)可用于键值对形式的配置文件

2)在加载时,需要数据有固定的格式,常用的是:键=值

二、特有方法:

1、设置和获取元素:

Object setProperty(String key,String value)

--->   调用Hashtable的方法put

String getProperty(String key)

--->   指定key搜索value

Set<String> stringPropertyName()

--->   返回属性列表的键集,存入Set集合

void load(InputStream ism)

--->   从输入字符流中读取属性列表

void load(Reader reader)

--->   从输入字符流中读取属性列表

load方法举例:

[java] view plaincopyprint?
  1. //load方法  
  2. public static void loadMthod()throws IOException  
  3. {  
  4.     Properties pop =new Properties();  
  5.     FileInputStream fis = new FileInputStream("info.txt");  
  6.     //将流中的数据加载进集合  
  7.     pop.load(fis);  
  8.       
  9.     pop.setProperty("zz","25");  
  10.     pop.setProperty("ww","24");  
  11.     FileOutputStream fos = new FileOutputStream("info.txt");  
  12.     pop.store(fos,"hehe");  
  13.     pop.list(System.out);  
  14.     fis.close();  
  15.     fos.close();  
  16.   
  17. }  

举例:

如何将六种的数据存储到集合中?

将文本文件中的键值数据存到集合中:

1、用一个流和文件关联

2、读取一行数据,将改行数据用“=”切割

3、将等号左边作为键,右边作为值,存入到Properties集合即可

[java] view plaincopyprint?
  1. //将流中的数据存储到集合中  
  2. public static void method()throws IOException  
  3. {  
  4.     BufferedReader bufr = null;  
  5.     try  
  6.     {  
  7.         Properties pop = new Properties();  
  8.         bufr = new BufferedReader(new FileReader("info.txt"));  
  9.         String line = null;  
  10.         while((line=bufr.readLine())!=null)  
  11.         {  
  12.             String[] arr = line.split("=");  
  13.             pop.setProperty(arr[0],arr[1]);  
  14.         }  
  15.         System.out.println(pop);  
  16.     }  
  17.     catch (IOException e)  
  18.     {  
  19.         throw new RuntimeException("文件操作失败");  
  20.     }  
  21.     finally  
  22.     {  
  23.         try  
  24.         {  
  25.             if(bufr!=null)  
  26.                 bufr.close();  
  27.         }  
  28.         catch (IOException e)  
  29.         {  
  30.             throw new RuntimeException("关闭流资源操作失败");  
  31.         }  
  32.     }         
  33. }  

示例:用于记录应用程序运行次数

如果使用次数已到,那么给出注册提示需要使用计数器,但是在程序结束后,会在内存中消失,此时就需要将其存入到文件中,所以需要一个配置文件,用于记录该软件使用的次数。便于阅读和操作数据

键值对数据 --->   Map集合;数据以文件形式存储 --->   IO技术。 --->Map+IO=Properties

[java] view plaincopyprint?
  1. import java.util.*;  
  2. import java.io.*;  
  3. class RunCount  
  4. {  
  5.     public static void main(String [] args)throws IOException  
  6.     {  
  7.         //创建一个Properties对象,集合和io的结合  
  8.         Properties pop = new Properties();  
  9.         //创建一个文件对象,用于操作文件  
  10.         File file = new File("count.ini");  
  11.         //先判断文件是否存在,如果不存在就创建一个  
  12.         if(!file.exists())  
  13.             file.createNewFile();  
  14.   
  15.         //创建读取流对象,读取文件中的信息  
  16.         FileInputStream fis = new FileInputStream(file);  
  17.         //将流中的文件信息存入集合中  
  18.         pop.load(fis);  
  19.           
  20.         //定义计数器  
  21.         int count = 0;  
  22.         //获取文件中键所对应的值  
  23.         String value = pop.getProperty("time");  
  24.         //判断值是否为null,不为空就将值传给计数器  
  25.         if(value!=null)  
  26.         {  
  27.             count = Integer.parseInt(value);  
  28.             //判断计数器是否为到达次数  
  29.             if(count>=5)  
  30.             {  
  31.                 System.out.println("次数已到,请注册");  
  32.                 return ;  
  33.             }  
  34.         }  
  35.         count++;  
  36.         //将获得的键值设置后存入集合中  
  37.         pop.setProperty("time",count+"");  
  38.         FileOutputStream fos = new FileOutputStream(file);  
  39.         pop.store(fos,"");  
  40.         fos.close();  
  41.         fis.close();  
  42.     }  
  43. }  

  打印流

一、概述:

1、打印流包括:PrintStream和PrintWriter

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

二、字节打印流:PrintStream

构造方法中可接收的参数类型:

1、file对象。File

2、字符串路径:String

3、字符输出流:OutputStream

三、字符串打印流:PrintWriter

构造方法中可接受的参数类型

1、file对象:File

2、字符串路径:String

3、字节输出流:OutputStream

4、字符输出流:Writer

举例:

[java] view plaincopyprint?
  1. import java.io.*;  
  2.   
  3. class PrintDemo  
  4. {  
  5.     public static void main(String[] args) throws IOException  
  6.     {  
  7.         //键盘录入,创建读取流对象  
  8.         BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));  
  9.         //使用打印流,将文件输出  
  10.         //输出到屏幕  
  11.         PrintWriter out = new PrintWriter(new FileWriter("a.txt"),true);  
  12.         String line = null;  
  13.         while((line=bufr.readLine())!=null)  
  14.         {  
  15.             if("over".equals(line))  
  16.                 break;  
  17.             out.println(line.toUpperCase());  
  18.             //out.flush();  
  19.         }  
  20.         bufr.close();  
  21.         out.close();  
  22.     }  
  23. }  

  合并流

一、概述:

1、SequenceInputStream可以将多个流连接成一个源

2、构造函数:

1)SequenceInputStream(Enumeration<? extends FileInputStream> e)

二、如何合并多个文件:

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

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

3、创建SequenceInputStream对象,合并流对象

4、创建写入流对象,FileOutputStream,将数据写入流资源

5、定义数组,将读取流数据存入数组,并将数组中元素写入文件中。

举例:

假设有三个文件,将三者合并到一个新文件中

[java] view plaincopyprint?
  1. //合并流对象  
  2. public static void sequenceFile()throws IOException  
  3. {  
  4.     FileOutputStream fos = null;  
  5.     SequenceInputStream sis = null;  
  6.     try  
  7.     {  
  8.         //创建集合,存储多个文件  
  9.         ArrayList<FileInputStream> al = new ArrayList<FileInputStream>();  
  10.         for(int i=1;i<=3;i++)  
  11.         {  
  12.             al.add(new FileInputStream(i+".part"));  
  13.         }  
  14.         //匿名内部类访问局部变量要final  
  15.         final Iterator<FileInputStream> it = al.iterator();  
  16.         //创建Enumeration匿名对象  
  17.         Enumeration<FileInputStream> en = new Enumeration<FileInputStream>()  
  18.         {  
  19.             public boolean hasMoreElements()  
  20.             {  
  21.                 return it.hasNext();  
  22.             }  
  23.             public FileInputStream nextElement()  
  24.             {  
  25.                 return it.next();  
  26.             }  
  27.         };  
  28.         //合并流对象,将集合元素加入。  
  29.         sis = new SequenceInputStream(en);  
  30.         //创建写入流对象,FileOutputStream  
  31.         fos = new FileOutputStream("7.bmp");  
  32.         byte[] b = new byte[1024*1024];  
  33.         int len = 0;  
  34.         //循环,将数据写入流资源  
  35.         while((len=sis.read(b))!=-1)  
  36.         {  
  37.             fos.write(b);  
  38.         }  
  39.   
  40.     }  
  41.     catch (IOException e)  
  42.     {  
  43.         throw new RuntimeException("文件操作失败");  
  44.     }  
  45.     //关闭流资源  
  46.     finally  
  47.     {  
  48.         try  
  49.         {  
  50.             if(fos!=null)  
  51.                 fos.close();  
  52.         }  
  53.         catch (IOException e)  
  54.         {  
  55.             throw new RuntimeException("关闭流资源操作失败");  
  56.         }  
  57.         try  
  58.         {  
  59.             if(sis!=null)  
  60.                 sis.close();  
  61.         }  
  62.         catch (IOException e)  
  63.         {  
  64.             throw new RuntimeException("关闭流资源操作失败");  
  65.         }  
  66.     }         
  67. }  

三、切割流资源:

1、先关联文件FileInputStream

2、定义写入流变量:FileOutputStream

3、创建数组,并定义切割所需的大小|

4、循环读写数据,并每次创建一个新写入流,创建完后并写入文件中

5、关闭流资源

[java] view plaincopyprint?
  1.     //切割流对象  
  2.     public static void splitFile()throws IOException  
  3.     {  
  4.         //创建全局变量  
  5.         FileInputStream fis = null;  
  6.         FileOutputStream fos = null;  
  7.         try  
  8.         {  
  9.             //创建文件读取流  
  10.             fis = new FileInputStream("0.bmp");  
  11.             //创建数组  
  12.             byte[] b = new byte[1024*1024];  
  13.             int len = 0;  
  14.             //计数器  
  15.             int count = 1;  
  16.             //循环写入数据  
  17.             while((len=fis.read(b))!=-1)  
  18.             {  
  19.                 //每次创建一个新写入流,写入后关闭流资源  
  20.                 fos = new FileOutputStream((count++)+".part");  
  21.                 fos.write(b,0,len);  
  22.                 fos.close();  
  23.             }  
  24.         }  
  25.         catch (IOException e)  
  26.         {  
  27.                 throw new RuntimeException("关闭流资源操作失败");  
  28.         }  
  29.         //关闭流资源  
  30.         finally  
  31.         {  
  32.             try  
  33.             {  
  34.                 if(fis!=null)  
  35.                     fis.close();  
  36.             }  
  37.             catch (IOException e)  
  38.             {  
  39.                 throw new RuntimeException("关闭流资源操作失败");  
  40.             }  
  41.         }  
  42.           
  43.     }  
  44. }  









原创粉丝点击