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

本文介绍了三个Java编程练习,涉及文件递归查找、加密解密及多线程日志写入。首先,通过MatchExtension类实现按扩展名搜索文件并输出相对路径。其次,实现加密和解密文件,利用FileInputStream和FileOutputStream进行读写操作。最后,设计一个单例的日志管理类Logger,确保多线程安全地写入日志,并在结束时保存文件。
摘要由CSDN通过智能技术生成

只提供逻辑,不支持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对象完成日志写。
    在这里插入图片描述

四、运行结果截图

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
题目如下: 编写程序实现文件上传功能。 有能力的同学可以自行设计文件下载功能,但是本次作业不要求。 服务器端: 要求能运行如下程序: java FileServer port foldername 实际的运行命令可能为 java FileServer 1234 d:\\share 解释如下: port为服务器开放的网络连接端口 foldername为服务器上某个文件夹,该文件夹存放客户端上传的文件。 客户端: 要求能运行如下程序: java FileClient server_ip port afile java FileClient server_ip port afolder 实际的运行命令可能为 java FileClient 127.0.0.1 1234 d:\\abc\\a.docx java FileClient 127.0.0.1 1234 d:\\abc 上面的程序运行完毕后,在服务器的文件下将看到客户端上传的文件a.docx 能看到客户端上传的文件夹abc,并且abc文件夹下的所有文件和子文件夹都上传到了服务器。 假设客户端有文件夹d:\\abc,该文件夹有子文件若干,有子文件夹若干。 客户端能够将某个文件上传到服务器,也可以将某个文件夹连同文件夹下的所有子文件和子文件夹 全部上传到服务器,服务器端保存客户端的文件夹结构和文件信息。 文件传输过程要求实现内容密,密算法任意,可以是DES,AES,RSA之类的算法都可以。 注意:是文件在传输过程中密,到服务器保存的时候,要求和客户端的文件内容一样, 服务器端的文件并不需要密。 要求支持多客户端并发上传文件,不考虑文件名冲突,假设多个客户端同时上传的文件没有重名现象。 必须使用多线程编程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值