黑马程序员——IO流(三)

-----------android培训java培训、java学习型技术博客、期待与您交流!------------ 

1、Properties

Properties是Hashtable的子类,存储的格式那么也是键值对,但是键和值都是字符串类型

例子:

 public class PropertiesDemo1 {

   public static void main(String[] args) {

     Properties pro = new Properties();

     /* setProperty(String key,String value)添加键和值 */

     pro.setProperty("java01", "001");

     pro.setProperty("java02", "002");

     /* 通过键获得值:String getProperty(String key) */

     System.out.println(pro.getProperty("java01"));

     /* Set<String>stringPropertyNames()获得键集 */

     Set<String> set = pro.stringPropertyNames();

     for (String s : set)

        System.out.println(s + ":" + pro.getProperty(s));

   }

}

结果:

001

java02:002

java01:001

2、配置文件

将配置文件中的信息存到集合中,然后修改其键和值,然后在传给文件。配置文件中的信息都是用=号存储的,例如:张三=001

第一种方法:我们不使用Properties对象,就是用集合来操作,思路:我们将文件读取出来,然后对每一行进行用=分割,把左边的存为键,把右边的存为值。

import java.io.FileReader;

import java.io.IOException;

import java.util.HashMap;

import java.util.Properties;

import java.util.Set;

 

public class PropertiesDemo1 {

   public static void main(String[] args) throws IOException {

     BufferedReader br = new BufferedReader(new FileReader("F:\\pro.txt"));//读取流

     HashMap<String, String> map = new HashMap<String, String>();//map集合

     String line = null;

     while ((line = br.readLine()) != null) {

        String[] s = line.split("=");

        map.put(s[0], s[1]);

     }

     System.out.println(map);

   }

 

}

结果:

{java02=002, java03=003, java01=001}

第二种方法:我们使用Properties对象,这样我们可以方便的加载流,来操作文件。

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

import java.util.HashMap;

import java.util.Properties;

import java.util.Set; 

public class PropertiesDemo1 {

   public static void main(String[] args) throws IOException {

     /* void load(Reader reader)将读取流字符流加载到集合中 */

     Properties pro = new Properties();

     FileReader fr = new FileReader("F:\\pro.txt");

     pro.load(fr);// 将字符读取流中读取的文件放到Properties对象中

     System.out.println("加载后的集合:" + pro);

     /* 下面我们修改集合中的数值 */

     pro.setProperty("java02", "hello");

     /*

      * store(Writer writer,String

      * comments)通过字符写入流,把集合中的信息更新配置文件,comments是注视内容

      */

     FileWriter fw = new FileWriter("F:\\pro.txt");

     pro.store(fw, "java");// 更新配置文件,注释为:java

     fr.close();

     fw.close();

   }

 

}

结果:

加载后的集合:{java03=003, java02=002, java01=001}

3、打印流

     PrintStream:字节打印流

   其构造方法传入的参数:

     File对象,字符串路径,字节流。

 PrintWriter:字符打印流

    其构造方法传入的参数有:

        File对象,字符串路径,字节流,字符流。

 注意:字符流中传入的是流的话,可以设置自动刷新,只有使用println,printf,format方法可以自动刷新。

import java.io.BufferedReader;

import java.io.File;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.PrintWriter;

 

public class PrintStreamDemo {

   public static void main(String[] agrs) throws IOException {

     // File f=newFile("F:\\demo.txt");

     BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

     PrintWriter pw = new PrintWriter(System.out,true);//true表示自动刷新,但是必须是println方法

     String line = null;

     while ((line = br.readLine()) != null) {

        if ("over".equals(line))

          return;

        pw.println("内容是:" + line);

        //pw.flush();

 

     }

     br.close();

     pw.close();

   }

}

4、合并流

    将多个流合并成一个流,便于操作

  例如:三个文件的内容写入到第四个文件中,那先把指定到前三个文件的流合并成一个流,然后指向第四个进行读取后,写入

     1.可以现将两个流合并到一个流,然后再把合并流和另外一个流再合并,public SequenceInputStream(InputStreams1,InputStream s2)

     2.也可以使用集合,public SequenceInputStream(Enumeration<? extends InputStream> e)

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.SequenceInputStream;

import java.util.Enumeration;

import java.util.Vector;

import java.io.FileInputStream;

 

public class SqueDemo {

  public static void main(String[] agrs) throws IOException {

    Vector<FileInputStream> v = new Vector<FileInputStream>();

    v.add(new FileInputStream("F:\\1.txt"));

    v.add(new FileInputStream("F:\\2.txt"));

    v.add(new FileInputStream("F:\\3.txt"));

    Enumeration<FileInputStream> en = v.elements();

    SequenceInputStreamsis = new SequenceInputStream(en);

 

    FileOutputStream out = new FileOutputStream("F:\\4.txt");

    byte[] b = new byte[1024];

    int len = 0;

    while ((len = sis.read(b)) != -1) {

      out.write(b, 0, len);

      out.flush();

    }

    sis.close();

    out.close();

 

  }

}

5、切割流

将图片分割后,然后在合并

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.SequenceInputStream;

import java.util.Enumeration;

import java.util.Vector;

 

public class PhotoDemo {

  public static void main(String[] args) throws IOException {

 

    FenGe();

 

    HeBing();

 

  }

 

  private static void HeBing() throws FileNotFoundException, IOException {

    /* 其实这个也可以使用循环,然后添加到集合, */

    Vector<FileInputStream> v = new Vector<FileInputStream>();

    v.add(new FileInputStream("F:\\part\\1.part"));

    v.add(new FileInputStream("F:\\part\\2.part"));

    v.add(new FileInputStream("F:\\part\\3.part"));

    v.add(new FileInputStream("F:\\part\\4.part"));

    v.add(new FileInputStream("F:\\part\\5.part"));

    Enumeration<FileInputStream> en = v.elements();

    SequenceInputStream sis = new SequenceInputStream(en);

 

    FileOutputStream out = new FileOutputStream("F:\\part\\1.bmp");

    byte[] b = new byte[1024];

    int len = 0;

    while ((len = sis.read(b)) != -1) {

      out.write(b, 0, len);

      out.flush();

    }

    sis.close();

    out.close();

  }

 

  /* 分割 */

  private static void FenGe() throws FileNotFoundException, IOException {

    FileInputStream input = new FileInputStream("F:\\1.png");

 

    FileOutputStream out = null;

    byte[] buf = new byte[1024 * 100];

    int count = 1;

    int len = 0;

    while ((len = input.read(buf)) != -1) {

      out = new FileOutputStream("F:\\part\\" + (count++) + ".part");// 分割后的后缀名自己可以自定义

      out.write(buf, 0, len);

      out.flush();

      out.close();

 

    }

    input.close();

  }

}

 

 

 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值