java之文件与多线程的简单编程

只提供逻辑,不支持copy。

:创造是极客唯一的属性

一、题目要求

三个简单的java编程实践,对于初学者来说,这是最快入门的方法。(大佬勿入

  1. 在输入指定的目录中递归查找输入指定的文件扩展名相同的文件,并打印其相对路径。(也就是要求掌握File对象的使用)
  2. 加密与解密。加密:读取文件plain.txt并将每个字节加5,然后输出到cipher.txt中;解密:读取文件cipher.txt并将每个字节减5,然后输出到decrypt.txt中。比较plain.txt和decrypt.txt的内容是否相同。(要求掌握文件IO)
  3. 多线程日志写入:使用单例设计模式(Singleton)实现日志管理类Logger,它可以向指定唯一的日志文件写入日志;这之后再实现多个功能线程调用该Logger类随机写入日志(要求互斥),结束时查看日志文件。(要求掌握线程调度)

二、基本思路

题目一:
实现一个MatchExtension类,其中的match方法负责处理递归匹配。Match的处理逻辑是这样的:如果此对象是一个文件并且扩展名匹配成功,则输出此文件相对于输入目录的路径(这里有一点技巧);如果此对象是一个目录,则再次调用match递归匹配该目录下的所有可能的目标文件,并且要注意,相对路径指的是相对于程序输入目录字符串。

题目二:
利用FileInputStream(read方法)和FileOutputStream(write方法)进行文件读和文件写,中间的加解密环节只要进行简单的字节加减就可以了。

题目三:
测试类Test_LogWrite中主线程创建一个全局唯一的Logger类实例对象,然后创建指定数量的子线程LogWrite(继承自Thread类),运行十秒,在这过程中各子线程随机写入日志文件一段消息“This is Thread”+id,十秒过后调用日志管理对象的terminate方法保存文件。为保证写入消息时的互斥,需要在相应代码区加入关键词Synchronized。

三、关键代码讲解

题目一:

  1. 在测试类中实例化MatchExtension,文件目录和待匹配的扩展名直接从命令行输入,如果输入目录合法(调用isDirectory函数进行判断),就调用m.match(dir)递归查找。
    在这里插入图片描述
  2. 在MatchExtension类中,维持一个dirName变量用来记录相对路径的起始点,后面的match方法每匹配到一个文件,会在其绝对路径中根据dirName的长度获取相对路径,然后输出。
    在这里插入图片描述

题目二:

  1. Test_EasyCrypto测试类,调用静态方法实现文件加解密。
    在这里插入图片描述
  2. EasyCrypto类中的encrypt和decrypt方法完成对文件字节的加解密。
    在这里插入图片描述

题目三:

  1. 测试类Test_LogWrite,负责创建日志管理对象和功能子线程,运行十秒后结束。
    在这里插入图片描述
  2. 日志管理类Logger,通过logWrite方法完成日志写,通过terminate方法完成日志保存。特别注意最末的单例设计模式代码,它保证了logger对象全局唯一,具体的代码和原理网上有许多,这里不再赘言。
    在这里插入图片描述
  3. 功能线程LogWrite类,继承Thread,故重写run方法,调用logger对象完成日志写。
    在这里插入图片描述

四、运行结果截图

题目一:
在这里插入图片描述
题目二:
在这里插入图片描述
题目三:
在这里插入图片描述

发布了24 篇原创文章 · 获赞 19 · 访问量 6896

猜你喜欢

转载自blog.csdn.net/tch3430493902/article/details/103188032