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

此工具我不再更新,里面大多数方法我迁移到了hutool工具包,而其一些不常用的功能被遗弃,项目暂留做为以后参考。 common-tools 一、数据库工具类 1、com.baijob.commonTools.db.ds C3p0Ds 和 DruidDs分别是两种连接池的实现,依赖于数据库配置文件,配置文件的样例参考config/db-example.setting 使用时将db-example.setting复制于${classpath}/config/db.setting,按照配置文件的说明替换相应值 如果使用Druid,则需参考druid-example.setting创建${classpath}/config/druid.setting文件,详情请参考官方文档 使用C3P0则需要参考c3p0-config-example.xml创建${classpath}/c3p0-config.xml来调节C3P0参数 此时即可调用C3p0Ds.getDataSource()或DruidDs.getDataSource()方法获得默认的数据源 如果要自定义数据库配置文件的参数,请调用相应的init(),传入相关参数 注:Setting对象请参考与之对应的章节 2、com.baijob.commonTools.db.DbUtil 数据库工具类,提供了关闭方法:关闭可以传入多个参数,关闭的顺序是按照参数的顺序来的,用于一次性关闭Connnection、Statement、ResultSet等 newSqlRunner方法用于快速新建一个SqlRunner(此类介绍参考下问) 3、com.baijob.commonTools.db.DsSetting,用于读取db.setting文件辅助类,内部使用 4、com.baijob.commonTools.db.SqlRunner类参考Apache的DbUtils工具包,封装了常用的增删改查方法,与com.baijob.commonTools.db.RsHandler配合使用 com.baijob.commonTools.db.RsHandler接口与Apache的DbUtils的ResultSetHandler等价,抽象结果集处理。 二、邮件工具类 1、com.baijob.commonTools.mail.MailAccount 邮件账户类。 可以调用MailAccount(String accountSettingFileBaseClassLoader)读取相对路径的Setting文件,配置参考mailAccount-example.setting 2、com.baijob.commonTools.mail.MailUtil邮件发送工具类,方法请参考注释 此工具类依赖javax.mail,请参考pom.xml添加依赖或手动下载 三、网络相关工具类 1、com.baijob.commonTools.net.AccessControl访问控制,基于配置文件,可以设定IP白名单或黑名单,可以通过配置文件实现简单的账户验证。 配置文件请参考access-example.xml 2、com.baijob.commonTools.net.Connector 连接对象实体类,有host、端口、用户名、密码等属性 3、com.baijob.commonTools.net.HtmlUtil HTML工具类,暂时只提供特殊字符转义 4、com.baijob.commonTools.net.SocketUtil socket工具类。 isUsableLocalPort() 检测本地某个端口是否可用(可用是指没有被其他程序占用) isValidPort()是否是符合规范的端口号 longToIpv4()将long转换为ipv4地址,反方法是ipv4ToLong() netCat()简易的数据发送方法 5、com.baijob.commonTools.net.SSHUtil SSH相关工具类 getSession()获得一个SSH会话 bindPort()将远程主机的端口映射到本地某个端口 6、com.baijob.commonTools.net.URLUtil 将相对、绝对路径转换为URL对象,用于网络或文件的读写,Setting的配置依赖此工具包 四、线程相关工具类 1、com.baijob.commonTools.thread.BaseRunnable 此类实现了Runnable接口,扩展了功能。 增加名称、ID,调用次数和时间统计、线程停止接口等,并且在线程运行时,不允许此线程第二次启动。 2、com.baijob.commonTools.thread.Executor 线程池工具类 调用静态方法execute()启动线程,此线程在公共的线程池执行 若想自定义线程池大小或独立控制,可调用newExecutor()实例化一个线程池 excAsync()执行一个异步方法 3、com.baijob.commonTools.thread.SyncQueue 阻塞队列,简化了JDK的BlockingQueue
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值