悠然乱弹:从几个方法的重构讲开去--文件相关的处理

简介:

简单看看吧,确实没有什么好的解决方案,那我们就抽丝剥茧,看看这三个方法里都涉及到哪些个领域?

  1. 涉及到注解方面的处理
  2. 涉及到多种注解方面的处理
  3. 涉及到文件查找方面的问题
  4. 涉及到多种资源文件查找方面的问题-file,jar
  5. 涉及到对查找到资源文件之后的后续处理的问题

好吧,可能还有别的问题,我们先利用上面分析出来的问题,看看有没有着手之处??

仔细分析下来,暂时有三种要遍历的文件了,file,jar,自定义ClassLoader,那我们简单抽象一下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public interface FileObject{
      String getFileName(); <span></span>      
      String getFileExtName();
      List<FileObject> getSubFileObject();
      void foreach( FileObjectFilter fileObjectFilter,FileObjectProcessor fileObjectProcessor);
      ...
}
然后构建
三个实现类:
public class FileObjectImpl implements FileObject{
...
}
public class JarFileObjectImpl implements FileObject{
...
}
public class ClassLoaderFileObjectImpl implements FileObject{
...
}

这样一来就把不同的文件类型分解了。

在后续的处理中,就只要写:

?
1
2
3
for (FileObject fileObject:fileObjects){
...
}
而不用再写烦人的if(protocal.equals("file"),  if(protocal.equals("jar")等等了,关键是后面不管再来多少种类型,咱的处理逻辑也不用再进行调整了。

接下来呢,肯定要进行文件的查找与处理,咋办呢??抄,在JDK中有个FileFilter,咱给他来个FileObjectFileter不就解了??

?
1
2
3
public interface FileObjectFilter {
     public boolean accept(FileObject fileObject);
}
那后续还要处理呢?再来个FileObjectProcessor

?
1
2
3
public interface FileObjectProcessor {
     void process(FileObject fileObject);
}
那不是还要递归做循环找文件么?写个递归处理方法:

?
1
2
3
4
5
6
7
8
public void foreach(FileObjectFilter fileObjectFilter,
                                FileObjectProcessor fileObjectProcessor) {
         if (fileObjectFilter.accept( this )) {
             fileObjectProcessor.process( this );
         }
             for (FileObject subFileObject : getChildren()) {
                 foreach(subFileObject, fileObjectFilter, fileObjectProcessor, parentFirst);
             } <span></span> }
那咱要找个所有的class文件,怎么找呢??先写个文件扩展名过滤器

?
1
2
3
4
5
6
7
8
9
10
11
12
13
public class FileExtNameFileObjectFilter implements FileObjectFilter {
     String fileExtName;
     public FileExtNameFileObjectFilter(String fileExtName) {
         this .fileExtName = fileExtName;
     }
     public boolean accept(FileObject fileObject) {
         String extName = fileObject.getExtName();
         if (extName != null ) {
                 return extName.equals(fileExtName);
         }
         return false ;
     }
}
接下来就如此这般了:

?
1
2
3
4
5
fileObject.foreach( new FileExtNameFileObjectFilter( "class" ), new FileObjectProcessor() {
     public void process(FileObject fileObject) {
         System.out.println(fileObject.getPath());
     }
});

OK,到此为止,各种文件的支持与遍历,过滤处理已经有比较好的解决方案了。

代码写起来很容易,扩展起来也很方便。可以满意了。

那么上面的代码可以处理为:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
fileObject.foreach( new AnnotationFileObjectFilter(Abc. class ), new FileObjectProcessor() {
     public void process(FileObject fileObject) {
         Class clazz=Class.forName(fileObject.getFileName);
         //做处理处理的一些事情
     }
});
 
fileObject.foreach( new AnnotationFileObjectFilter(Def. class ), new FileObjectProcessor() {
     public void process(FileObject fileObject) {
         Class clazz=Class.forName(fileObject.getFileName);
         //做处理处理的一些事情
     }
});
...
在文件处理方面比原来的形式好多了,但是上面提到的性能问题还是存在的。

胖子不是一口吃成的,罗马不是一天到达的,这篇先到这儿,下篇再看注解相关的处理。

相关文章
|
3天前
|
人工智能 自然语言处理 Shell
深度评测 | 仅用3分钟,百炼调用满血版 Deepseek-r1 API,百万Token免费用,简直不要太爽。
仅用3分钟,百炼调用满血版Deepseek-r1 API,享受百万免费Token。阿里云提供零门槛、快速部署的解决方案,支持云控制台和Cloud Shell两种方式,操作简便。Deepseek-r1满血版在推理能力上表现出色,尤其擅长数学、代码和自然语言处理任务,使用过程中无卡顿,体验丝滑。结合Chatbox工具,用户可轻松掌控模型,提升工作效率。阿里云大模型服务平台百炼不仅速度快,还确保数据安全,值得信赖。
146469 24
深度评测 | 仅用3分钟,百炼调用满血版 Deepseek-r1 API,百万Token免费用,简直不要太爽。
|
5天前
|
人工智能 API 网络安全
用DeepSeek,就在阿里云!四种方式助您快速使用 DeepSeek-R1 满血版!更有内部实战指导!
DeepSeek自发布以来,凭借卓越的技术性能和开源策略迅速吸引了全球关注。DeepSeek-R1作为系列中的佼佼者,在多个基准测试中超越现有顶尖模型,展现了强大的推理能力。然而,由于其爆火及受到黑客攻击,官网使用受限,影响用户体验。为解决这一问题,阿里云提供了多种解决方案。
16677 37
|
13天前
|
机器学习/深度学习 人工智能 自然语言处理
PAI Model Gallery 支持云上一键部署 DeepSeek-V3、DeepSeek-R1 系列模型
DeepSeek 系列模型以其卓越性能在全球范围内备受瞩目,多次评测中表现优异,性能接近甚至超越国际顶尖闭源模型(如OpenAI的GPT-4、Claude-3.5-Sonnet等)。企业用户和开发者可使用 PAI 平台一键部署 DeepSeek 系列模型,实现 DeepSeek 系列模型与现有业务的高效融合。
|
5天前
|
并行计算 PyTorch 算法框架/工具
本地部署DeepSeek模型
要在本地部署DeepSeek模型,需准备Linux(推荐Ubuntu 20.04+)或兼容的Windows/macOS环境,配备NVIDIA GPU(建议RTX 3060+)。安装Python 3.8+、PyTorch/TensorFlow等依赖,并通过官方渠道下载模型文件。配置模型后,编写推理脚本进行测试,可选使用FastAPI服务化部署或Docker容器化。注意资源监控和许可协议。
1305 8
|
13天前
|
人工智能 搜索推荐 Docker
手把手教你使用 Ollama 和 LobeChat 快速本地部署 DeepSeek R1 模型,创建个性化 AI 助手
DeepSeek R1 + LobeChat + Ollama:快速本地部署模型,创建个性化 AI 助手
3415 117
手把手教你使用 Ollama 和 LobeChat 快速本地部署 DeepSeek R1 模型,创建个性化 AI 助手
|
8天前
|
人工智能 自然语言处理 API
DeepSeek全尺寸模型上线阿里云百炼!
阿里云百炼平台近日上线了DeepSeek-V3、DeepSeek-R1及其蒸馏版本等六款全尺寸AI模型,参数量达671B,提供高达100万免费tokens。这些模型在数学、代码、自然语言推理等任务上表现出色,支持灵活调用和经济高效的解决方案,助力开发者和企业加速创新与数字化转型。示例代码展示了如何通过API使用DeepSeek-R1模型进行推理,用户可轻松获取思考过程和最终答案。
|
5天前
|
人工智能 自然语言处理 程序员
如何在通义灵码里用上DeepSeek-V3 和 DeepSeek-R1 满血版671B模型?
除了 AI 程序员的重磅上线外,近期通义灵码能力再升级全新上线模型选择功能,目前已经支持 Qwen2.5、DeepSeek-V3 和 R1系列模型,用户可以在 VSCode 和 JetBrains 里搜索并下载最新通义灵码插件,在输入框里选择模型,即可轻松切换模型。
930 14
|
12天前
|
API 开发工具 Python
阿里云PAI部署DeepSeek及调用
本文介绍如何在阿里云PAI EAS上部署DeepSeek模型,涵盖7B模型的部署、SDK和API调用。7B模型只需一张A10显卡,部署时间约10分钟。文章详细展示了模型信息查看、在线调试及通过OpenAI SDK和Python Requests进行调用的步骤,并附有测试结果和参考文档链接。
1934 9
阿里云PAI部署DeepSeek及调用
|
9天前
|
人工智能 数据可视化 Linux
【保姆级教程】3步搞定DeepSeek本地部署
DeepSeek在2025年春节期间突然爆火出圈。在目前DeepSeek的网站中,极不稳定,总是服务器繁忙,这时候本地部署就可以有效规避问题。本文以最浅显易懂的方式带读者一起完成DeepSeek-r1大模型的本地部署。
|
12天前
|
缓存 自然语言处理 安全
快速调用 Deepseek API!【超详细教程】
Deepseek 强大的功能,在本教程中,将指导您如何获取 DeepSeek API 密钥,并演示如何使用该密钥调用 DeepSeek API 以进行调试。

热门文章

最新文章

相关实验场景

更多