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、转换流的字符编码后续处理

 

转载于:https://www.cnblogs.com/erhai/p/4807440.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值