20201014冯强

学习总结:

1.流(Stream

1.1输入流( InputStream )

一个抽象类 他的子类很多 我们只了解 FileInputSteam 和BufferInputSteam

大部分功能我们可以用FileInputStream 进行文件的读取 读取的方法是read()方法 可以传一个人byte类型的数组

BufferInputStream 是对FileInputSteam的封装 底层也是使用的FileInputSteam 不过对其增加了 标记 和重置等功能

当使用完后要调用flash()方法 不然会可能导致导入的数据不准确

1.2输出流(OutputStream)

和输入流方法相似。

作业:

package exam;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;

import javax.print.attribute.standard.NumberUpSupported;

public class FileCutter {
    
    
    
    public static void main(String[] args) throws IOException {
        FileCutter f =  new FileCutter();
        File  original =new File("D:\\lol\\list\\小魂 - 关山酒.flac");
        File  directory = new File("D:\\lol");
        System.out.println(f.split(original,10,directory));
        System.out.println(f.join(directory, new File("D:\\lol\\list\\newMussic.flac")));
    }
    
    
    
    public int split(final File original, final int size, final File directory) throws IOException {
        if(!original.isFile()) {
            throw new IOException("找不到路径");
        }
        if(size<0) {
            throw new NumberFormatException();
        }
        //读取的文件流
                FileInputStream fos = new FileInputStream(original);
                //定义一个标识 表示每个分割的子列表
                int i =1;
                //第一个子元素
                FileOutputStream fds = new FileOutputStream(directory.getPath()+"\\"+i+"小魂 - 关山酒.flac");
                byte []  b = new byte[1024*1024*size];
                int index = -1;
                while((index = fos.read(b))!=-1) {
                    //写入
                    fds.write(b,0,index);
                    if(fos.available()!=0) {
                        i++;
                     fds = new FileOutputStream(directory.getPath()+"\\"+i+"小魂 - 关山酒.flac");    
                    }
                }
                fos.close();
                fds.close();
                return i;
    }

    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    public long join(final File dir, final File target) throws IOException {
        File [] fileList =dir.listFiles();
        System.out.println(Arrays.toString(fileList));
        byte [] b = new byte[10*1024*1024];
        FileInputStream fos =null;
        FileOutputStream fds = new FileOutputStream(target,true);
        for(int i=0;i<fileList.length;i++) {
            if(!fileList[i].isDirectory()) {
                fos = new FileInputStream(fileList[i]);
                while(true) {
                     int index=fos.read(b);
                     if(index==-1) {
                         break;
                     }
                     fds.write(b, 0, index);
                     fds.flush();
                }
            }   
        }
        fos.close();
        fds.close();
        
        return target.getTotalSpace();
    }
}

标签

评论