您的位置:首页 > 产品设计 > UI/UE

黑马程序员—SequenceInputStream和Properties类

2014-01-24 15:00 363 查看
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

1、SequenceInputStream

SequenceInputStream
表示其他输入流的逻辑串联。它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。


 


SequenceInputStream
和InputStream一样都有read方法,用法基本一致。


 


SequenceInputStream
的构造方法:


SequenceInputStream(Enumeration<?
extends InputStream> e)

通过记住参数来初始化新创建的 SequenceInputStream,该参数必须是生成运行时类型为 InputStream
对象的 Enumeration 型参数

   


SequenceInputStream(InputStream
s1, InputStream s2)

通过记住这两个参数来初始化新创建的 SequenceInputStream(将按顺序读取这两个参数,先读取 s1,然后读取 s2),以提供从此
SequenceInputStream读取的字节。

 

下面的这个程序是用SequenceInputStream创建有三个输入流的管道流,并将管道流中的三个输入流依次写入指定的文件中。

 

publicclass SequenceDemo

{
   publicstaticvoid main(String[] args)throws
IOException
   {
      //创建Vector集合,这个集合的泛型是FileInputStream类型的
      Vector<FileInputStream> v =
new Vector<FileInputStream>();
      
      //向集合中添加文件字节流对象
      v.add(new FileInputStream("G:\\1.txt"));
      v.add(new FileInputStream("G:\\2.txt"));
      v.add(new FileInputStream("G:\\3.txt"));
      
      //将这些集合中的元素转化成Enumeration类型
      Enumeration<FileInputStream> en = v.elements();
      
      //将这些文件字节流放入管道流中
      SequenceInputStreamsis =
new SequenceInputStream(en);
      
      //创建文件输出流对象
      FileOutputStream fos =
new
FileOutputStream("G:\\4.txt");
      
      byte[] buf =
newbyte[1024];
      
      int len = 0;
      
      //将管道流中的字节流依次写入创建的文件中
      while((len = sis.read(buf))!=-1)
      {
          fos.write(buf, 0, len);
      }
      
      fos.close();
      
      sis.close();
   }
 
}
 
2、思考:SequenceInputStream流可以把几个文件合成为一个文件,那么他可以把一个文件又分成若干个文件吗?答案是不能的,应为Sequence只用读取流SequenceInputStream而并没有SequenceOutputStream,所以他不能把一个文件分离成若干个文件。
下面一个例子中有两个函数,一个是用SequenceInputStream把文件合并的combine,一个是用普通方法把文件分离成若干个文件的split。
publicclass SplitFile
{
   publicstaticvoid main(String[] args)throws
IOException
   {
      split();
      combine();
   }
   
   //将两个文件用管道流合成一个文件
   publicstaticvoid combine()throws
IOException
   {
      //创建Vector集合,集合中的对象是FileInputStream对象
      Vector<FileInputStream> v =
new Vector<FileInputStream>();
      
      //向集合中加入两个流对象
      v.add(new FileInputStream("G:\\123\\2.part"));
      v.add(new FileInputStream("G:\\123\\1.part"));
      
      //将这些集合中的元素转化成Enumeration类型
      Enumeration en = v.elements();
      
      //将这些文件字节流放入管道流中
      SequenceInputStreamsis =
new SequenceInputStream(en);
      
      //创建文件输出流对象
      FileOutputStream fos =
new
FileOutputStream("G:\\111.jpg");
      
      byte[] buf =
newbyte[1024];
      
      int len = 0;
      
      //将管道流中的字节流依次写入创建的文件中
      while((len = sis.read(buf))!=-1)
      {
          fos.write(buf, 0, len);
      }
      fos.close();
      sis.close();
   }
   
   //将一个文件分割成若干个文件
   publicstaticvoid
split()throws IOException
   {
      //创建一个文件读取流对象用来读取文件
      FileInputStream fis =
new
FileInputStream("G:\\123.jpg");
      
      //创建一个文件输出流对象用来写入数据
      FileOutputStream fos =
null
;
      
      //定义一个1024*1024字节大小的字节数组
      byte[] buf =
newbyte[1024*1024];
      
      int len = 0;
      
      //定义一个标识文件名的整型数
      int count = 1;
      
      //将源文件中的数据循环写入每次新建的文件中
      //每循环一次就创建一个被写入数据的文件
      while((len = fis.read(buf))!=-1)
      {
          //创建被写入数据的文件
          fos = new FileOutputStream("G:\\123\\"+(count++)+".part");
          
          //将数据写入创建好的文件中
          fos.write(buf, 0, len);
          
          //关闭输出流流
          fos.close();
      }
      //关闭读取流
      fis.close();
   }
 
}
 
3、Properties

Properties是hashtable的子类也就是说它具备map集合的特点,而且它里面存储的键值对都是字符串是集合中和IO技术相结合的集合容器
该对象的特点:可以用于键值对形式的配置文件
 练习:
 将info.txt中的键值数据存到集合中进行操作
 1、用一个流和info.txt文件关联
 2、读取一行数据,将该行数据用“=”进行切割
 3、等号左边作为键,右边作为值,存入到Properties集合中即可
 
 
 
publicclass PropertiesDemo
{
   publicstaticvoid main(String[] args)
throws IOException
   {
      //setAndget();
      method_1();
   }
   
   publicstaticvoid method_1()throws
IOException
   {
      //打开一个字符流读文件
      BufferedReader bufr  =
new
BufferedReader(new FileReader("info.txt"));
      
      String line = null;
      
      //创建一个属性对象
      Properties prop =
new
Properties();
      
      while((line = bufr.readLine())!=null)
      {
          //“=”分割字符串成两个字符串
          String[] arr = line.split("=");
          
          //将分割出来的字符串存进Properies对象中
          prop.setProperty(arr[0], arr[1]);
          
          System.out.println(arr[0]+"::"+arr[1]);
      }
      
      bufr.close();
      
      System.out.println(prop);
      
   }
   
   //设置和获取属性名和值
   publicstaticvoid setAndget()
   {
      Properties prop =
new
Properties();
      
      //设置属性键和值
      prop.setProperty("name",
"admin");
      
      prop.setProperty("password",
"lsk123");
      
      System.out.println(prop);
      
      //获得属性的值
      String name = prop.getProperty("name");
      
      System.out.println(name);
      
      Set<String> sp =  prop.stringPropertyNames();
      
      //遍历属性集合
      for(String s : sp)
      {
          System.out.println(s+prop.getProperty(s));
      }
      
   }
 
}
 
4、Properties的例子:
创建程序运行次数配置文件超过限定次数时,不能运行程序
publicclass RunCount

{
   publicstaticvoid main(String[] args)
throws IOException

   {
      //创建Properties对象
      Properties prop =
new
Properties();
      
      //创建文件对象
      File file = new File("count.ini");
      
      //如果file不存在就创建
      if(!file.exists())
          file.createNewFile();
      
      //创建文件读取流对象
      FileInputStream fis =
new
FileInputStream(file);
      
      //从输入流中读取属性列表
      prop.load(fis);
      
      int count = 0;
      
      //获取value属性值
      String value = prop.getProperty("time");
      
      if(value!=null)
      {
          count = Integer.parseInt(value);
          
          //如果运行次数大于5次结束运行
          if(count>5)
          {
             System.out.println("please regest!");
             return ;
          }
      }
      
      //运行次数加一
      count++;
      
      //把time属性的值设置为count
      prop.setProperty("time", count+"");
      
      //创建写文件流
      FileOutputStream fos =
new
FileOutputStream(file);
      
      //将此 Properties
表中的属性列表(键和元素对)写入输出流
      prop.store(fos,
"");
      
      fos.close();
      
      fis.close();
      
      
      
   }
 
}
 ---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐