zoukankan      html  css  js  c++  java
  • java基础48 IO流技术(序列流)

    本文知识点目录:

        1、SequenceInputStream序列流的步骤
        2、实例
        3、附录(音乐的切割与合并)



    1、SequenceInputStream序列流的步骤

        1.找到目标文件
        2.建立数据输入输出通道
        3.建立序列流对象
        4.关闭资源

    2、实例                       

      1 package com.dhb.file;
      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.Vector;
     11 
     12 /**
     13  * @author DSHORE / 2018-7-13
     14  *
     15  */
     16 /*
     17  * SequenceInputStream():序列流
     18  * */
     19 public class Demo21 {
     20 
     21     public static void main(String[] args) throws IOException {
     22         meger1();//字节流
     23         meger2();//序列流
     24         meger3();//序列流
     25     }
     26     
     27     //方式3:(序列流)把三个文件合成一个文件
     28     public static void meger3() throws IOException{
     29         //找到目标文件
     30         File file1 = new File("F:\a.txt");
     31         File file2 = new File("F:\b.txt");
     32         File file3 = new File("F:\c.txt");
     33         File file4 = new File("F:\d.txt");
     34         //建立数据输入输出通道
     35         FileOutputStream fos = new FileOutputStream(file4);
     36         FileInputStream fis1 = new FileInputStream(file1);
     37         FileInputStream fis2 = new FileInputStream(file2);
     38         FileInputStream fis3 = new FileInputStream(file3);
     39         //建立序列流
     40         Vector<FileInputStream> vector = new Vector<FileInputStream>();
     41         vector.add(fis1);
     42         vector.add(fis2);
     43         vector.add(fis3);
     44         Enumeration<FileInputStream> e = vector.elements();
     45         SequenceInputStream sequenceInputStream = new SequenceInputStream(e);
     46         //读取文件
     47         byte[] buf = new byte[1024];
     48         int length = 0;
     49         while((length = sequenceInputStream.read(buf)) != -1){
     50             fos.write(buf, 0, length);
     51         }
     52         //关闭资源
     53         sequenceInputStream.close();
     54         fos.close();
     55     }
     56     
     57     //方式2:(序列流) 需求:使用SequenceInputStream序列流合并a.txt与b.txt文件的内容
     58     public static void meger2() throws IOException{
     59         //找到目标文件
     60         File file1 = new File("F:\a.txt");
     61         File file2 = new File("F:\b.txt");
     62         File file3 = new File("F:\c.txt");
     63         //建立数据输入输出通道
     64         FileOutputStream fos = new FileOutputStream(file3);
     65         FileInputStream fis = new FileInputStream(file1);
     66         FileInputStream fis1 = new FileInputStream(file2);
     67         //建立我们的序列流对象
     68         SequenceInputStream sis = new SequenceInputStream(fis, fis1);
     69         byte[] buf = new byte[1024];
     70         int length = 0;
     71         while((length = sis.read(buf)) != -1){
     72             fos.write(buf, 0, length);
     73         }
     74         //关闭资源
     75         sis.close();
     76         fos.close();
     77     }
     78 
     79     //方式1:(字节流) 需求:把a.txt与b.txt文件内容合并.
     80     public static void meger1() throws IOException{
     81         //找到目标文件
     82         File file1=new File("F:\a.txt");
     83         File file2=new File("F:\b.txt");
     84         File file3=new File("F:\c.txt");
     85         //建立数据输入输出通道
     86         FileOutputStream fos=new FileOutputStream(file3);
     87         FileInputStream fis=new FileInputStream(file1);
     88         FileInputStream fis1=new FileInputStream(file2);
     89         //把输入流存储到集合中,然后在从集合中读取
     90         ArrayList<FileInputStream> list=new ArrayList<FileInputStream>();
     91         list.add(fis);
     92         list.add(fis1);
     93         //准备一个数组
     94         byte[] buf=new byte[1024];
     95         int length=0;
     96         for (int i = 0; i < list.size(); i++) {
     97             FileInputStream fileInputStream=list.get(i);
     98             while((length=fileInputStream.read(buf))!=-1){
     99                 fos.write(buf, 0, length);
    100             }
    101             //关闭资源
    102             fileInputStream.close();
    103         }
    104         fos.close();
    105     }
    106 }

    原有文件

           

    运行结果图

          

    附录

     1 package com.dhb.file;
     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.Enumeration;
     9 import java.util.Vector;
    10 
    11 /**
    12  * @author DSHORE / 2018-7-16
    13  *
    14  */
    15 //需求:mp3音乐的切割与合并
    16 public class Demo22 {
    17     public static void main(String[] args) throws IOException {
    18         cutFile();
    19         //mergeFile();
    20     }
    21     //合并mp3
    22     public static void mergeFile() throws IOException{
    23         //找到目标文件
    24         File dir = new File("E:\MyMusic");
    25         //通过目标文件找到所有mp3,然后把这些mp3添加到vector集合中
    26         Vector<FileInputStream> vector = new Vector<FileInputStream>();
    27         File[] file = dir.listFiles();
    28         for (File file2 : file) {
    29             if(file2.getName().endsWith(".mp3")){//获取以.mp3结尾的文件名
    30                 vector.add(new FileInputStream(file2));//添加到vector集合中
    31             }
    32         }
    33         Enumeration<FileInputStream> e = vector.elements();//返回此向量组件的枚举。即把上面集合中的元素给了e对象
    34         SequenceInputStream sis = new SequenceInputStream(e);//建立序列流对象
    35         //建立缓冲数组读取文件
    36         byte[] buf = new byte[1024];
    37         int length = 0;
    38         FileOutputStream fos = new FileOutputStream(new File("MyMusic\MergeMusic\合并音乐-忘尘谷.mp3"));//建立输出字节流
    39         while((length = sis.read(buf)) != -1){//读
    40             fos.write(buf, 0, length);//写
    41         }
    42         fos.close();
    43         sis.close();
    44     }
    45     //切割mp3
    46     public static void cutFile() throws IOException{
    47         File file = new File("E:\Music\忘尘谷.mp3");
    48         //目标文件夹
    49         File dir = new File("E:\MyMusic");
    50         //建立数据输入通道
    51         FileInputStream fis = new FileInputStream(file);
    52         //建立缓冲数组
    53         byte[] buf = new byte[1024*1024];//1024*1024 = 1MB,即:把该音乐切割成每份1MB的大小
    54         int length = 0;
    55       //边读边写
    56 for (int i = 0; (length=fis.read(buf)) != -1; i++) {//读 (每次读1MB) 57 FileOutputStream fos = new FileOutputStream(new File(dir,"wcg"+i+".mp3"));//建立数据输出通道 58 fos.write(buf, 0, length);// 59 fos.close(); 60 } 61 fis.close(); 62 } 63 }

    运行结果图

          

    原创作者:DSHORE

    作者主页:http://www.cnblogs.com/dshore123/

    原文出自:https://www.cnblogs.com/dshore123/p/9306363.html

    欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!

  • 相关阅读:
    遇到屏蔽selenium的站点如何突破
    subprocess.Popen stdout重定向内容实时获取
    thinkphp Composer安装指南
    职场片
    php。。。
    多线程相关
    狂刷1000题~~2
    狂刷1000题~~1
    关于eclipse中看不到源码的问题
    一篇看懂++i i++
  • 原文地址:https://www.cnblogs.com/dshore123/p/9306363.html
Copyright © 2011-2022 走看看