[实训]Java中FileUtils类的使用

在java的日常开发中,有个常用包commons-io.jar,其中有对文件处理的工具类FileUtils。他提供了一些最常用的操作的封装好的方法,可以在开发中可以快速完成对文件的一些功能的处理。

在项目开发中,我主要使用了FileUtils类提供的对文件进行读写的部分方法,不需要自己根据java的file类进行编写代码,使用该类一行搞定。

如下为摘抄的部分方法的使用,基本根据方法名就能知道方法是干什么用的,借此机会学习一下其他方法的用法。

/**
 * FileUtils支持很多文件操作,如
 *
 * 文件写入
 * 读取文件
 * 创建目录
 * 拷贝文件和目录
 * 删除文件和目录
 * 从URL转换
 * 基于统配和过滤查看文件和目录
 * 比较文件内容
 * 文件的更新时间
 * 检查校验码
 *
 */
public class FileUtilsTest {
    private static File parent = new File("D://test");
    @Test
    public void getDirTest(){
        //获得基本的信息
        System.out.println(FileUtils.getTempDirectory());//获取临时目录 java.io.tmpdir,getUserDirectoryPath返回路径字符串
        System.out.println(FileUtils.getUserDirectory());//获取用户主目录 user.home,getUserDirectoryPath返回路径字符串

        //以可读的方式,返回文件的大小EB, PB, TB, GB, MB, KB or bytes
        System.out.println(FileUtils.byteCountToDisplaySize(10000000));
        System.out.println(FileUtils.byteCountToDisplaySize(1));
    }

    @Test
    public void openStream() throws IOException {
        //获取文件输入和输出的文件流
        //文件是目录或者不存在,都会跑出异常
        InputStream in = FileUtils.openInputStream(new File("D://test/test1"));
        OutputStream out = FileUtils.openOutputStream(new File("D://test/test2"));
        out = FileUtils.openOutputStream(new File("D://test/test3"),true);//是否追加的形式添加内容
    }

    @Test
    public void FileOperation() throws IOException {
        //创建文件,如果文件存在则更新时间;如果不存在,创建一个空文件
        //创建空文件的方式为:
        // final OutputStream out = openOutputStream(file);
        // IOUtils.closeQuietly(out);
        FileUtils.touch(new File("D://test/test4"));

        //文件内容的对比
        FileUtils.contentEquals(new File("D://test/test1"),new File("D://test/test2"));
        FileUtils.contentEqualsIgnoreEOL(new File("D://test/test1"),new File("D://test/test2"),null);//忽略换行符,第三个参数是字符集

        //根据URL获取文件
        FileUtils.toFile(new URL("file://D://test/test1"));
        FileUtils.toFiles(null);
        FileUtils.toURLs(new File[]{new File("D://test/test1")});

        //文件拷贝
        FileUtils.copyFileToDirectory(new File("/test1"),new File("/dir"),true);//第三个参数是否更新时间
        FileUtils.copyFile(new File("/source"),new File("/target"),true);//TODO 阅读doCopy源码

        //目录拷贝
        File srcDir = new File("/source");
        File destDir = new File("/target");

        FileUtils.copyDirectoryToDirectory(new File("/source"),new File("/target"));
        FileUtils.copyDirectory(new File("/source"),new File("/target"));

        FileUtils.copyDirectory(srcDir, destDir, DirectoryFileFilter.DIRECTORY);//仅仅拷贝目录

        IOFileFilter txtSuffixFilter = FileFilterUtils.suffixFileFilter(".txt");// 创建.txt过滤器
        IOFileFilter txtFiles = FileFilterUtils.andFileFilter(FileFileFilter.FILE, txtSuffixFilter);
        // 创建包含目录或者txt文件的过滤器
        FileFilter filter = FileFilterUtils.orFileFilter(DirectoryFileFilter.DIRECTORY, txtFiles);
        // Copy using the filter
        FileUtils.copyDirectory(srcDir, destDir, filter);//TODO 阅读doCopyDirectory源码

        //文件拷贝
        FileUtils.copyInputStreamToFile(new FileInputStream("/test"),new File("/test"));
        FileUtils.copyURLToFile(new URL("file:/test"),new File("/test"));

        //删除文件
        FileUtils.deleteDirectory(new File("/test"));//删除目录下所有的内容
        FileUtils.deleteQuietly(new File("/test"));//如果是目录,会级联删除;不会抛出异常

        //判断文件是否存在
        FileUtils.directoryContains(new File("/dir"),new File("/file"));

        //清除目录中的内容,不会删除该目录;
        //先verifiedListFiles检查目录,检查目录是否为目录、是否存在,然后调用listFiles,如果返回null,则抛出异常
        //遍历目录中的文件,如果是目录则递归删除;如果是文件则强制删除,删除失败(文件不存在或无法删除)都会抛出异常
        FileUtils.cleanDirectory(new File("/dir"));//TODO verifiedListFiles  <------2016/11/24

        //等待一个文件xx秒,知道文件创建后才返回。每max(100,remainning)循环检查一次
        while(FileUtils.waitFor(new File("/dir"),60)){}

        //读取目标文件,内部调用IOUtils.toString(inputstream,"utf-8")
        String str = FileUtils.readFileToString(new File("/dir"),"utf-8");

        //内部调用IOUtils.toByteArray(in)
        byte[] bytes = FileUtils.readFileToByteArray(new File("/dir"));

        //内部调用IOUtils.readLines(in, Charsets.toCharset(encoding));
        List<String> strs = FileUtils.readLines(new File("/dir"),"utf-8");

        //内部调用IOUtils.lineIterator(in, encoding)
        FileUtils.lineIterator(new File("/dir"),"utf-8");

        //四个参数分别为:目标文件,写入的字符串,字符集,是否追加
        FileUtils.writeStringToFile(new File("/target"),"string","utf-8",true);

        //write可以接受charsequence类型的数据,string,stringbuilder和stringbuffer都是实现了charsequence接口
        FileUtils.write(new File("/target"),"target char sequence","utf-8",true);

        FileUtils.writeByteArrayToFile(new File("/target"),"bytes".getBytes());//(file,字符数组)
        FileUtils.writeByteArrayToFile(new File("/target"),"bytes".getBytes(),true);//(file,字符数组,是否追加)
        FileUtils.writeByteArrayToFile(new File("/target"),"bytes".getBytes(),0,10);//(file,字符数组,起始位置,结束位置)
        FileUtils.writeByteArrayToFile(new File("/target"),"bytes".getBytes(),0,10,true);//(file,字符数组,起始位置,结束位置,是否追加)

        //writeLines多了一个lineEnding参数
        FileUtils.writeLines(new File("/target"),"utf-8", FileUtils.readLines(new File("/target"),"utf-8"));

        //强制删除
        FileUtils.forceDelete(new File("/target"));

        //在JVM
        FileUtils.forceDeleteOnExit(new File("/target"));

        //强制创建文件目录,如果文件存在,会抛出异常
        FileUtils.forceMkdir(new File("/target"));

        //强制创建父级目录
        FileUtils.forceMkdirParent(new File("/xxxx/target"));

        //如果是文件,直接读取文件大小;如果是目录,级联计算文件下的所有文件大小
        FileUtils.sizeOf(new File("/target"));//返回Long
        FileUtils.sizeOfAsBigInteger(new File("/target"));//返回BigInteger
        FileUtils.sizeOfDirectory(new File("/target"));
        FileUtils.sizeOfDirectoryAsBigInteger(new File("/target"));

        //对比文件新旧
        FileUtils.isFileNewer(new File("/target"),new File("/file"));

        FileUtils.isFileOlder(new File("/target"), new Date());

        FileUtils.checksum(new File("/target"),new CRC32());
        FileUtils.checksumCRC32(new File("/target"));

        FileUtils.moveDirectory(new File("/target"),new File("/file"));
        FileUtils.moveDirectoryToDirectory(new File("/target"),new File("/file"),true);
        FileUtils.moveFile(new File("/target"),new File("/file"));
        FileUtils.moveFileToDirectory(new File("/target"),new File("/dir"),true);
        FileUtils.moveToDirectory(new File("/target"),new File("/dir"),true);

        FileUtils.isSymlink(new File("/target"));
    }


    @Test
    public void findFiles(){
        //返回文件的列表
        List<File> files = (List<File>) FileUtils.listFiles(parent,new String[]{"test1","test2"},true);//TODO 重点看一下源码

        //返回文件迭代器
        Iterator<File> files_iter =  FileUtils.iterateFiles(parent,new String[]{"test1","test3"},true);

        //把collection<File>转换成File[]
        FileUtils.convertFileCollectionToFileArray(files);
    }
}

参考资料:
org.apache.commons.io.FileUtils源码:
  http://grepcode.com/file/repo1.maven.org/maven2/commons-io/commons-io/2.4/org/apache/commons/io/FileUtils.java

自行准备本地知识库资料(如本专业相关资料内容)作为大模型本地知识库的输入 教师侧:备课与设计: 根据所提供的本地课程大纲、课程知识库文档等自动设计教学内容,包括知识讲解、实训练习与指导、时间分布等。 · 考核内容生成: 根据教学内容自动生成考核题目及参考答案,考核题目种可多样化,根据学科设计,如计算机可设计相关编程题和答案 · 学情数据分析: 对学生提交的答案进行自动化检测,提供错误定位与修正建议。对学生整体数据进行分析,总结知识掌握情况与教学建议。 学生侧: · 在线学习助手: 对学生的提出的问题,结合教学内容进行解答; · 实时练习评测助手: 根据学生历史练习情况,以及学生的练习要求,生成随练题目,并对练习纠错。 管理侧: 用户管理:管理员/教师/学生等用户的基本管理 课件资源管理:按学科列表教师备课产生的课件、练习等资源,可以导出。 大屏概览: · 教师使用次数统计/活跃板块(当日/本周) · 学生使用次数统计/活跃板块(当日/本周) · 教学效率指数(备课与修正耗时、课后练习设计与修正耗时、课程优化方向(如:某学科通过率持续偏低) · 学生学习效果(平均正确率趋势、知识点掌握情况,高频错误知识点等) 非功能性需求 需明确使用至少1个开源大模型作为核心技术组件; 需采用本地知识库作为输入,知识库资料总量不大于100M; 生成的内容、练习与答案与本地知识库的关联性和准确性;(对抽取知识点设计的题目验证关联性和与答案的准确性有知识点说明) 告诉我教师端的后端部分该怎么做,使用spring boot,大模型使用通义 以下是我的框架结构src/main/java └── com.example.teacherassistant ├── config │ ├── AiConfig.java │ ├── SecurityConfig.java │ ├── WebConfig.java + │ ├── MilvusConfig.java // 向量数据库配置 + │ └── AsyncConfig.java // 异步处理配置 ├── controller │ ├── AiController.java │ ├── ContentController.java │ ├── CourseController.java │ ├── ExerciseController.java │ ├── AnalysisController.java + │ └── KnowledgeController.java // 知识库管理接口 ├── service │ ├── impl │ │ ├── AiServiceImpl.java │ │ ├── ContentServiceImpl.java │ │ ├── AnalysisServiceImpl.java + │ │ ├── KnowledgeServiceImpl.java // 知识库处理服务 + │ │ └── AssessmentServiceImpl.java // 考核生成服务 │ ├── AiService.java │ ├── ContentService.java │ ├── AnalysisService.java + │ ├── KnowledgeService.java // 知识库服务接口 + │ └── AssessmentService.java // 考核服务接口 ├── repository │ ├── CoursewareRepository.java │ ├── ExerciseRepository.java │ ├── UserRepository.java + │ ├── KnowledgeRepo.java // 知识库文档存储 + │ └── AnswerRepo.java // 学生答题存储 ├── model │ ├── entity │ │ ├── Courseware.java │ │ ├── Exercise.java │ │ ├── User.java + │ │ ├── KnowledgeDoc.java // 知识库文档实体 + │ │ ├── StudentAnswer.java // 学生答题实体 + │ │ └── KnowledgePoint.java // 知识点实体 │ ├── dto │ │ ├── AiRequest.java │ │ ├── AnalysisResult.java + │ │ ├── TeachingPlanDto.java // 教学计划DTO + │ │ └── ExerciseGenReq.java // 习题生成请求DTO │ └── enums │ └── SubjectType.java ├── util │ ├── AiPromptBuilder.java │ ├── FileUtils.java │ ├── KnowledgeExtractor.java + │ ├── VectorUtils.java // 向量计算工具 + │ ├── DocumentParser.java // 文档解析工具 + │ └── QwenClient.java // 通义API客户端 + ├── task + │ └── KnowledgeIndexTask.java // 知识库索引异步任务 └── TeacherAssistantApplication.java
最新发布
07-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值