IO扩展

Properties

简单的配置文件==Properties=Map+IO   复杂的用XML  ==》工具dom4j

 1 package io;
 2 
 3 import java.io.File;
 4 import java.io.FileInputStream;
 5 import java.io.FileOutputStream;
 6 import java.io.IOException;
 7 import java.util.Properties;
 8 
 9 /**
10  * 
11  * 1.做一个配置文件1.Properties,time表示次数,>=3时,提示软件试用次数用尽
12  *
13  */
14 public class PropertiesDemo {
15 
16     public static void main(String[] args)throws IOException {
17         Properties pro=new Properties();
18 //
19         File f=new File("E:\\1.Properties");
20         if(!f.exists())
21             f.createNewFile();
22         FileInputStream fis=new FileInputStream(f);
23         
24 //        加载源
25         pro.load(fis);
26         
27 //        操作配置属性
28         String value=pro.getProperty("time");
29         int count=0;
30         if(value!=null){
31             if((count=Integer.parseInt(value))>=3){
32                 System.out.println("软件试用次数用尽");
33                 return;
34             }
35         }
36         count++;
37         pro.setProperty("time", count+"");
38 
39 //        目的
40         FileOutputStream fos=new FileOutputStream(f);
41 //        存储配置属性到目的
42         pro.store(fos, "what's this");
43 //        关闭流
44         fos.close();
45         fis.close();
46         
47     }
48 
49 }
Properties

SequenceInputStream

序列流---可将多个输入流合并成一个流来处理

应用---文件的切割与合并

 1 package io;
 2 
 3 import java.io.File;
 4 import java.io.FileInputStream;
 5 import java.io.FileOutputStream;
 6 import java.io.IOException;
 7 import java.io.SequenceInputStream;
 8 import java.util.ArrayList;
 9 import java.util.Enumeration;
10 import java.util.Iterator;
11 
12 /**
13  * 
14  * 将一张图片划分为若干碎片,存放至E:\\Split文件夹中
15  * 将碎片合并成一张图片,存放至E:\\Split文件夹中
16  */
17 public class SplitMergeDemo {
18 
19     public static void main(String[] args)throws IOException {
20 //        源:E:\\1.png
21         FileInputStream fis=new FileInputStream("E:\\1.png");
22         File f=new File("E:\\Split\\");
23         if(!f.exists())
24             f.mkdir();//如果文件夹不存在,则创建之
25         split(fis);//切割
26         merge(f);//合并
27 
28     }
29     public static void split(FileInputStream fis)throws IOException{
30 //        目的:
31         FileOutputStream fos=null;
32         int len=0;
33         byte[] buf=new byte[1024*25];
34         int count=0;
35         while((len=fis.read(buf))!=-1){
36             fos=new FileOutputStream("E:\\Split\\"+(++count)+".part");
37             fos.write(buf, 0, len);
38             fos.close();
39         }
40         fis.close();
41     }
42     public static void merge(File f)throws IOException{
43 //        获取流
44         File[] files=f.listFiles();
45 //        合流为一,可以用Vector,但是慢,用ArrayList
46         ArrayList<FileInputStream> al=new ArrayList<FileInputStream>();
47         for(int x=0;x<files.length;x++)
48             al.add(new FileInputStream(files[x]));
49         //匿名内部内访问成员要使用final修饰,用迭代器
50         final Iterator<FileInputStream> it=al.iterator();
51             
52         Enumeration<FileInputStream> e=new Enumeration<FileInputStream>() {
53             
54             @Override
55             public FileInputStream nextElement() {
56                 return it.next();
57             }
58             
59             @Override
60             public boolean hasMoreElements() {
61                 // TODO Auto-generated method stub
62                 return it.hasNext();
63             }
64         };
65         SequenceInputStream sis=new SequenceInputStream(e);
66 //        确定目的
67         FileOutputStream fos=new FileOutputStream(new File(f,"0.png"));
68 //        写入
69         int len=0;
70         byte[] buf=new byte[1024*8];
71         while((len=sis.read(buf))!=-1){
72             fos.write(buf,0,len);
73             fos.flush();
74         }
75 //        关流
76         sis.close();
77         fos.close();
78     }
79     
80 
81 }
SplitMergeDemo.java

值得注意的是

1.SequenceInputStream构造函数传入的是Enumeration枚举

2.合入多个流,应该用ArrayList,比Vector效率高

3.实现Enumeration需要复写nextElement()方法和hasMoreElemerts()方法

4.复写上述方法,应该用ArrayList的迭代器Iterator的hasNext()和next()方法

PrinterWriter

 1     public static void main(String[] args)throws IOException {
 2 //        源:键盘控制台输入,System.in =InputStreamReader
 3         BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
 4 //        目的:E:\\1.txt,PrinterWriter,自动刷新
 5         PrintWriter pw=new PrintWriter(new FileWriter("E:\\1.txt"),true);
 6 //        写入操作
 7         String line=null;
 8         while((line=bufr.readLine())!=null){
 9             if("over".equals(line))
10                 break;
11             pw.println(line);
12         }
13 //        关闭源
14         pw.close();
15         bufr.close();
16     }
PrinterWriterDemo.java

ObjectInputStream与ObjectOutputStream对象流

1.对象存放在堆内存中,当程序结束,会释放对内存,而某些对象可能会用的到,于是乎想把需要的对象持久化存起来,需要时又读取

2.

 

对象流、管道流、RandomAccessFile、DataStream、ByteArrayStream、转换流的字符编码后续处理

 

posted @ 2015-09-14 16:03  洱海  阅读(290)  评论(0编辑  收藏  举报
.First { margin: 10px 0; font-family: 'Microsoft Yahei'; text-align: left; padding: 6px 20px; color: #fff; background: #55895B; font-size: 20px; border-radius: 4px; clear: both; } .Second { margin: 10px 0; font-family: 'Microsoft Yahei'; padding: 6px 20px; background: #93C8A2; color: white; font-size: 18px; border-radius: 4px; clear: both; } .Third { margin: 10px 0; padding: 6px 20px; font-family: 'Microsoft Yahei'; margin: 15px 0; font-size: 16px; color: black; background: #C6EFD2; border-radius: 4px; clear: both; } .note { margin: 10px 0; padding: 15px 20px 15px 60px; background: #FCFAA9 url('http://images.cnblogs.com/cnblogs_com/libaoheng/305804/o_yellow-pin.png') no-repeat 20px 0; font-size: 15px; font-family: 'Microsoft Yahei'; box-shadow: 0 0 8px #aaa; clear: both; } .demo { text-align: left; padding: 6px 20px; overflow: auto; border-radius: 4px; background: orange; color: #fff; font-size: 16px; clear: both; } .cnblogs_Highlighter { border: solid 1px #ccc; clear: both; } .cnblogs_code { background: #EFFFF4; border: solid 0px #939393; font-size: 14px; clear: both; padding: 10px 20px; } .cnblogs_code pre { font-size: 14px; } .cnblogs_code span { font-family: Courier New; font-size: 14px; }