Java中第三方开源IO工具包commons和功能流(合并流)

Commons

    commons 是 第三方开源 IO工具包
/*
 * 获取扩展名
 * static String getExtension(String filename) 
 * 获取文件名字
 * static String getName(String filename) 
 * 判断是不是这个扩展名
 * static boolean isExtension(String filename,String extension) 
 * 复制文件夹
 * static void copyDirectoryToDirectory(File src,File desc)
 * 复制文件
 * static void copyFile(File src,File desc)
 * 将字符串写入文件
 * static void writeStringToFile(File src,String date)
 * 按字符串读取文件
 * static String readFileToString(File src)
 * 写入文件 可以选取用什么字节流写入
 * static void write(String data, OutputStream output)
 * 读取文件以字符串形式到集合中
 * static List<String> readLines(InputStream input)
 */

    public class Demo02 {
        public static void main(String[] args) throws IOException {
            // 获取扩展名
            String extension = FilenameUtils.getExtension("/Users/lanou/Desktop/XTest/sx.txt");
            System.out.println(extension);
            //获取文件的名字
            String name = FilenameUtils.getName("/Users/lanou/Desktop/XTest/sx.txt");
            System.out.println(name);
            // 判断扩展名
            boolean extension2 = FilenameUtils.isExtension("/Users/lanou/Desktop/XTest/sx.txt", "jpg");
            System.out.println(extension2);
            // 复制文件夹
            FileUtils.copyDirectoryToDirectory(new File("/Users/lanou/Desktop/ZTest/a"), new File("/Users/lanou/Desktop/XTest"));
            // 复制文件
            FileUtils.copyFile(new File("/Users/lanou/Desktop/XTest/sx.txt"), new File("/Users/lanou/Desktop/XTest/ss.txt"));
            // 将字符串写入文件
            FileUtils.writeStringToFile(new File("/Users/lanou/Desktop/XTest/sx.txt"), "很霸道");
            // 按字符串读取文件
            String readFileToString = FileUtils.readFileToString(new File("/Users/lanou/Desktop/XTest/sx.txt"));
            System.out.println(readFileToString);
            // 写入文件 可以选取用什么字节流写入
            FileOutputStream fos = new FileOutputStream("/Users/lanou/Desktop/XTest/sm.txt");
            IOUtils.write("尹贵水傻逼", fos);
            // 读取文件以字符串形式到集合中
            FileInputStream fis = new FileInputStream("/Users/lanou/Desktop/Test/a.txt");
            List<String> readLines = IOUtils.readLines(fis);
            System.out.println(readLines);

        }
    }

功能流(合并流)

    SequenceInputStream
    具有合并功能
    可以把多个流合并成一个流

    SequenceInputStream(Enumeration<? extends InputStream> e) 
    构造方法:
        参数    是Vector特有的迭代器
                该Vector要保存的是 InputStream 的子类

    SequenceInputStream(InputStream s1, InputStream s2) 
    参数: 传两个字节输入流
    public class Demo {
        public static void main(String[] args) throws IOException {
            // 将三个文件 写成一个文件
            // 创建集合 保存的是 FileInputStream
            Vector<FileInputStream> vector = new vector<>();
            vector.add(new FileInputStream("/Users/s/Desktop/ZTest/1.txt"));
            vector.add(new FileInputStream("/Users/s/Desktop/ZTest/2.txt"));
            vector.add(new FileInputStream("/Users/s/Desktop/ZTest/3.txt"));
            // 获取迭代器
            Enumeration<FileInputStream> elements = vector.elements();
            // 构建合并流(把三个文件都读到一起)
            SequenceInputStream sis = new SequenceInputStream(elements);
            // 写入到一个文件中
            FileoutputStream fos = new FileoutputStream("/Users/s/Desktop/ZTest/4.txt");
            // 数组方式写入
            byte[] b = new byte[1024];
            int len = 0;
            while((len = sis.read(b)) != -1){
                // 写
                fos.write(b, 0, len);
            }
            // 关闭资源
            fos.close();
            sis.close();
        }
    }    

练习

    1.将图片切割成多个1M
    2.然后将这些文件 合并成一个图片
    public class Demo04 {
        public static void main(String[] args) throws IOException {
            //fun1();
            //合并图片
            Vector<FileInputStream> vector = new vector<>();
            // 循环拼接路径 并且添加到集合中
            int num = 1;
            // 1M1M的拼 图片多大 i就小于多少
            // 这里我们拼接的图片为7.9M
            for(i = 1; i < 8; i++){
                // 拼接要合并的文件
                File file = new File("/Users/lanou/Desktop/ZTest/dp" + i + ".png");
                FileInputStream fis = new FileInputStream(file);
                // 添加到集合中
                vector.add(fis);
            }
            //获取迭代器
            Enumeration<FileInputStream> elements = vector.element;
            // 创建合并流
            SequenceInputStream sis = new SequenceInputStream(elements);
            // 写到新路径下
            FileOutputStream fos = new FileoutputStream("/Users/s/Desktop/ZTest/dpNew")
            // 进行读写
            byte[] b = new byte[1024 * 1024];
            int len = 0;
            while((len = sis.read(b)) != -1){
                fos.write(b, 0, len);
            }
            sis.close();
            fos.close();
        }
        public static void fun1() throws FileNotFoundException, IOException {
            FileInputStream fis = new FileInputStream(new File("/Users/s/Desktop/ZTest/dp.png"));
            // 定义一个数字 保存文件的名字
            int num = 1;
            FileOutputStream fos = null;
            // 这里代表 1M
            byte[] b = new byte[1024 * 1024];
            int len = 0;
            while((len = fis.read(b)) != -1){
                // 写入多个文件 拼接文件的名字
                fos = new FileOutputStream("/Users/s/Desktop/ZTest/dp" + num++ + ".png");
                fos.write(b, 0, len);
                fos.close();
            }
            fis.close();
        }
    }


                                        Day.28

http://blog.csdn.net/ssssssue

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值