zoukankan      html  css  js  c++  java
  • java笔记之IO详解——序列流

    序列流,对多个流进行合并。

    SequenceInputStream 表示其他输入流的逻辑串联。它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。

    需求:把a.txt与b.txt 文件的内容合并。写入到c.txt。

    import java.io.File;
    import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; public class test01 { public static void main(String[] args) throws IOException { File file01=new File("F:/a.txt"); File file02=new File("F:/b.txt"); File out03=new File("F:/c.txt"); FileInputStream fileInputStream01=new FileInputStream(file01); FileInputStream fileInputStream02=new FileInputStream(file02); FileOutputStream fileOutputStream =new FileOutputStream(out03); ArrayList
    <FileInputStream> list=new ArrayList<FileInputStream>();//将其添加到Arraylist集合中, list.add(fileInputStream01); list.add(fileInputStream02); int len=0; byte buff[]=new byte[1024]; for (int i = 0; i < list.size(); i++) { FileInputStream fileInputStream=list.get(i);//取出对象 while ((len=fileInputStream.read(buff))!=-1) {//读取内容 fileOutputStream.write(buff, 0, len);//将字节写出 } fileInputStream.close(); } fileOutputStream.close(); } }
    使用SequenceInputStream合并文件。

        public static void merge2() throws IOException{
            //找到目标文件
            File inFile1 = new File("F:\a.txt");
            File inFile2 = new File("F:\b.txt");
            File outFile = new File("F:\c.txt");
            //建立数据的输入输出通道
            FileOutputStream fileOutputStream = new FileOutputStream(outFile);
            
            FileInputStream fileInputStream1 = new FileInputStream(inFile1);
            FileInputStream fileInputStream2 = new FileInputStream(inFile2);
            //建立序列流对象
            SequenceInputStream inputStream = new SequenceInputStream(fileInputStream1,fileInputStream2);
            byte[] buf = new byte[1024];
            int length = 0 ; 
            
            while((length = inputStream.read(buf))!=-1){
                fileOutputStream.write(buf,0,length);
            }
            //关闭资源
            inputStream.close();
            fileOutputStream.close();
    
        }

    此时的SequenceInputStream 只能处理2个,当处理多个时,除了第一种方法,还有我们前面学过的Vector集合,

        public static void combine03() throws IOException{
            File file01=new File("F:/a.txt");
            File file02=new File("F:/b.txt");
            File file03=new File("F:/c.txt");
            File out03=new File("F:/d.txt");
            FileInputStream fileInputStream01=new FileInputStream(file01);
            FileInputStream fileInputStream02=new FileInputStream(file02);
            FileInputStream fileInputStream03=new FileInputStream(file03);
            FileOutputStream fileOutputStream =new FileOutputStream(out03);
            Vector< FileInputStream> vector=new Vector<FileInputStream>();
            vector.add(fileInputStream01);
            vector.add(fileInputStream02);
            vector.add(fileInputStream03);
            Enumeration<FileInputStream> e=vector.elements();
            SequenceInputStream sequenceInputStream = new SequenceInputStream(e);
            
            //读取文件数据
            byte[] buf = new byte[1024];
            int length = 0; 
            
            while((length = sequenceInputStream.read(buf))!=-1){
                fileOutputStream.write(buf,0,length);
            }
            
            //关闭资源
            sequenceInputStream.close();
            fileOutputStream.close();
            
            
        }

     将一个MP3文件进行切割并和并,切割合并不影响播放

    import java.io.File;
    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;
    
    /*
     
     需求: 把一首mp3先切割成n份,然后再把这些文件合并起来。
     
     */
    
    
    public class Demo2 {
    
        public static void main(String[] args) throws IOException {
    //        cutFile();
            mergeFlile();
        }
        
        //合并
        public static void mergeFlile() throws IOException{
            //找到目标文件
            File dir = new File("F:\music");
            //通过目标文件夹找到所有的MP3文件,然后把所有的MP3文件添加到vector中。
            Vector<FileInputStream> vector = new Vector<FileInputStream>();
            File[] files = dir.listFiles();
            for(File file : files){
                if(file.getName().endsWith(".mp3")){
                    vector.add(new FileInputStream(file));
                }
            }
            //通过Vector获取迭代器
            Enumeration<FileInputStream> e = vector.elements();
            //创建序列流
            SequenceInputStream inputStream = new SequenceInputStream(e);
            //建立文件的输出通道
            FileOutputStream fileOutputStream = new FileOutputStream("F:\合并.mp3");
            //建立缓冲数组读取文件
            byte[] buf = new byte[1024];
            int length = 0 ; 
            while((length =  inputStream.read(buf))!=-1){
                fileOutputStream.write(buf,0,length);
            }
            //关闭资源
            fileOutputStream.close();
            inputStream.close();
            
        }
        
        
        
        //切割MP3
        public static void cutFile() throws IOException{
            File file = new File("F:\美女\1.mp3");
            //目标文件夹
            File dir = new File("F:\music");
            //建立数据的输入通道
            FileInputStream fileInputStream = new FileInputStream(file);
            //建立缓冲数组读取
            byte[] buf = new byte[1024*1024];
            int length = 0;
            for(int i = 0 ;  (length = fileInputStream.read(buf))!=-1 ; i++){
                FileOutputStream fileOutputStream =    new FileOutputStream(new File(dir,"part"+i+".mp3"));
                fileOutputStream.write(buf,0,length);
                fileOutputStream.close();
            }
            //关闭资源
            fileInputStream.close();
        }
        
        
    }
  • 相关阅读:
    迁移服务器遇到django-crontab不执行定时任务问题
    纯CSS3+DIV实现小三角形边框
    mysql密码错误-ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor:yes)
    收货地址下边的平行四边形彩色线条
    小程序导航栏全屏navigationStyle自定义导航栏,小程序轮播图导航栏
    移动宽带下Github网页上不去的解决办法
    线段比例式或等积式的证明思路
    两角不等的证明思路
    线段不等的证明思路
    两角相等的证明思路
  • 原文地址:https://www.cnblogs.com/AllenRandolph/p/7017984.html
Copyright © 2011-2022 走看看