zoukankan      html  css  js  c++  java
  • 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、转换流的字符编码后续处理

  • 相关阅读:
    es6---let和const
    node.js开发指南系列(1)partial is not defined
    input唤起键盘影响移动端底部fixed定位
    vue滑动吸顶以及锚点定位
    nodejs开发准备工作(2)
    nodejs开发准备工作(1)
    php基础小知识
    php基础
    git基础
    ps基础
  • 原文地址:https://www.cnblogs.com/erhai/p/4807440.html
Copyright © 2011-2022 走看看