首页 > 编程语言 >JAVA-IO 指定目录中查找文件,文件合并分割

JAVA-IO 指定目录中查找文件,文件合并分割

时间:2024-09-16 21:50:15浏览次数:12  
标签:JAVA bytes 查找文件 targetFile len IO new cutSize out

指定目录中查找文件

public  static List<String> findFile(File target,String fileName){
    ArrayList<String> path = new ArrayList<>();
    if(target==null) {
        return path;
    }
    if(target.isDirectory()){
        File[] files = target.listFiles();
        if(files!=null){
            for(File f: files){
                findFile(f,fileName);
            }
        }
    }else{
        String name = target.getName().toLowerCase();
        if(name.contains(fileName)){
           path.add(target.getAbsolutePath());
        }
    }
    return path;
}

文件合并分割 

/**
 * 文件分割
 * @param targetFile 待分割文件
 * @param cutSize 每个文件大小
 */
public static void division(File targetFile, long cutSize,String targetPath) {

    if (targetFile == null) {
        return;
    }
    // 计算总分割的文件数
    int num = targetFile.length() % cutSize == 0 ? (int) (targetFile.length() / cutSize):(int) (targetFile.length() / cutSize + 1);
    try {
        // 构造一个文件输入流
        BufferedInputStream in = new BufferedInputStream(new FileInputStream(targetFile));
        BufferedOutputStream out = null;

        byte[] bytes = null;
        int len = -1;
        int count = 0;

        //循环次为生成文件的个数
        for (int i = 0; i < num; i++) {

            out = new BufferedOutputStream(
                    new FileOutputStream(new File(targetPath+ (i + 1) + "-temp-" + targetFile.getName())));


            if (cutSize <= 1024) {
                bytes = new byte[(int) cutSize];
                count = 1;
            } else {
                bytes = new byte[1024];
                count = (int) cutSize / 1024;
            }
            //count放在前面避免多度一次
            while (count > 0 && (len = in.read(bytes)) != -1) {
                out.write(bytes, 0, len);
                out.flush();
                count--;
            }

            //计算每个文件大小除于1024的余数,决定是否要再读取一次
            if (cutSize % 1024 != 0) {

                bytes = new byte[(int) cutSize % 1024];
                len = in.read(bytes);
                out.write(bytes, 0, len);
                out.flush();
                out.close();
            }
        }
        in.close();

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

/**
 * 合并文件
 * @param es 待合并的文件
 * @param targetFile 目标文件
 */
public  static void merge(Enumeration<InputStream> es, String targetFile) {
    SequenceInputStream sis = new SequenceInputStream(es);
    try {
        BufferedOutputStream bos = new BufferedOutputStream(
                new FileOutputStream(targetFile));

        byte[] bytes = new byte[1024];
        int len = -1;
        while((len=sis.read(bytes))!=-1){
            bos.write(bytes,0,len);
            bos.flush();
        }
        bos.close();
        sis.close();
        System.out.println("合并完成.");
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

标签:JAVA,bytes,查找文件,targetFile,len,IO,new,cutSize,out
From: https://blog.csdn.net/qq_26594041/article/details/142307687

相关文章

  • JAVA-IO获取resource WEB-INF 中文件 JAR包中
    getResource+getPath()classPaththis.getClass().getClassLoader().getResource(StringUtils.EMPTY).getPath()Stringpath=this.getClass().getClassLoader().getResource(fileName).getPath();StringfilePath=URLDecoder.decode(path,StandardCharsets.UTF_8);......
  • [Java面向对象]封装继承多态
    封装、继承和多态是面向对象编程的三大特征。封装封装概念封装就是把抽象出的数据(属性)和对数据的操作(方法)封装在一起,数据被保护在内部,程序的其他部分只有通过被授权的操作(方法)才能对数据进行操作。封装的好处隐藏实现的细节一个操作具体的实现过程往往很复杂,通过封装用户......
  • 软件设计原则(Java实现/给出正例反例)
    文章目录前言1.开闭原则(Open/ClosedPrinciple)违反开闭原则的示例遵循开闭原则的示例2.里氏代换原则(LiskovSubstitutionPrinciple)违反里氏代换原则的示例遵循里氏代换原则的示例3.依赖倒转原则(DependencyInversionPrinciple)违反依赖倒转原则的示例遵循依赖倒转......
  • 铁路订票平台小程序的设计与实现(Java+Mysql+万字文档+ppt+系统源码+数据库 +调试)
    目  录目  录第1章 绪论1.1 课题背景1.2课题意义1.3研究内容第2章 开发环境与技术2.1MYSQL数据库2.2Java语言2.3微信小程序技术2.4 SpringBoot框架2.5 B/S架构2.6 Tomcat介绍2.7HTML简介2.8MyEclipse开发工具第3章 系统分析......
  • Java - 1
    特点面向对象OOP健壮性:强类型机制、异常处理、垃圾的自动收集跨平台性:.class文件可以在多个系统下运行(java虚拟机-JVM)解释性语言:编译好的代码需要解释器来执行JVM-JavavirtualmachineJDK包含JVM​ -运行->JVMforLinux​ ......
  • 基于微信小程序的使命召唤游戏助手的设计与实现(Java+Mysql+万字文档+ppt+系统源码+数
    目 录1绪  论1.1开发背景1.2国内外研究现状和发展趋势综述1.3开发设计的意义及研究方向2系统开发技术2.1JAVA编程语言2.2springboot框架2.3IDEA介绍2.4B/S架构2.5MySQL数据库介绍2.6微服务架构2.7微服务架构的优势3系统分析3.1整体分析......
  • 【Java】深入理解Java中的多线程同步机制
    一、多线程的数据不一致    当多个线程同时运行时,线程的调度由操作系统决定,程序本身无法决定。因此,任何一个线程都有可能在任何指令处被操作系统暂停,然后在某个时间段后继续执行。    这个时候,一个在单线程模型下不存在的问题就会发生:如果多个线程同时读写共享......
  • Java 双括号初始化(匿名内部类初始化)
    原文:Java:双括号初始化/匿名内部类初始化法ArrayList可以这样初始化://新建一个列表并赋初值A、B、CArrayList<String>list=newArrayList<String>(){{add("A");add("B");add("C");}};还有其他集合比如HashMap的初始化:Mapmap=newHashMap()......
  • 60.《Java集合框架-List-Set-Map》
    此篇所写不知道你们是否在网页开发的时候当看到要写Map集合什么HashMap之类的突然蒙了虽然之前学过突然让你调用方法懵了所以在此总结一下以备后需对比数组可存储任意类型对象且存储长度是可以变的集合类乃内存层面对数据进行存储数据库是持久层断电后仍长期存在......
  • WPF JumpList JumpList ApplicationPath IconResourcePath
    //App.xaml<Applicationx:Class="WpfApp369.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local=&......