今天看了一个文件管理的java后台源码,elfinder

发现这个东东比我写的代码效率告到不知道哪去了,苦思冥想后还是抽点时间看看吧。。

它实现了我们电脑上的所以关于文件操作的动作,并生成了api开放给前台,具体详细还是看官方文档吧,本人英文贼菜

之间用了Java1.7中的NIO里的path类,此工具类可以使我们不在使用恶心的FIle对象啦,而且速度超快,看着代码整个人都舒服这里有它的介绍JAVA NIO:Path ,File

项目地址elfinder-java-connector此版本没有前台页面实现

此版本有前台实现elfinder-2.x-servlet不过此版本没有Java源码,是通过maven导入的方式让我们调用它的核心类

两种相差spring集成、加载配置文件到context的实现

相差补充:elfinder-java-connector主要介绍源码的梗概

elfinder-2.x-servlet介绍了这个核心类的包装,多了用户视图,操作权限等一些附加模块

我今天看的是前者的代码

首先我们先从底层看齐

  今天稍微看了一个大概

  首先定义了一个公共的接口向外部开放,所以的规则依据此接口开发

public interface Volume{
  各种需要操作文件的定义
String getMimeType(Target target) throws IOException;
}
 合成这个接口的包装接口(设计模式中合成)
public interface Target { Volume getVolume(); }

好了之后实现了这个包装接口Target

public class NIO2FileSystemTarget implements Target {

    private final Path path;
private final Volume volume;
。。。。。。。。。。。。。。。。。。。

再然后聚合了这个几个接口和实现类

public class NIO2FileSystemVolume implements Volume {

    private final String alias;
private final Path rootDir;
private final Detector detector; private NIO2FileSystemVolume(Builder builder) {
this.alias = builder.alias;
this.rootDir = builder.rootDir;
this.detector = new NIO2FileTypeDetector();//我今天大致弄明白了这个的实现
createRootDir();
}
@Override
public String getMimeType(Target target) throws IOException {
Path path = fromTarget(target);
return detector.detect(path);
}
。。。。。。。。。。。。。。。。。。。。。。

我们从这个聚合类开始看

下面这个获取文件类型的实现是通过tika的工具获取的 文件内容读取--Tika这个介绍比较详细

Tika是Apache下开源的文档内容解析工具,支持上千种文档格式(如PPT、XLS、PDF)。Tika使用统一的方法对各种类型文件进行内容解析,封装了各种格式解析的内部实现,可用于搜索引擎索引、内容分析、转换等场景。

我们来看他的具体实现

首先是Detector 他的一个接口

public interface Detector {
String detect(InputStream inputStream)throws IOException;
String detect(Path path)throws IOException;
}

实现

public class NIO2DileTypeDetector implements Detector {

   private  final Tika tika = new Tika();
。。。。。。。。。。。。。。。。。。。。。

看了这些大概弄明白这个代码的大致写法心里有点小激动,我们写个测试类

public class Test {
@org.junit.Test
public void Test1()throws IOException {
Path path = Paths.get("F:\\[加密与解密(第三版)].段钢.扫描版.pdf");
NIO2DileTypeDetector detector = new NIO2DileTypeDetector();
System.out.println(detector.detect(path));
}
}

C:\server\jdk1.8.0_77\bin\java 。。。。。。。。。。
application/pdf

 

  

elfinder源码浏览-Volume文件系统操作类(1)的更多相关文章

  1. 鸿蒙内核源码分析(根文件系统) | 先挂到`/`上的文件系统 | 百篇博客分析OpenHarmony源码 | v66.01

    百篇博客系列篇.本篇为: v66.xx 鸿蒙内核源码分析(根文件系统) | 先挂到/上的文件系统 | 51.c.h.o 文件系统相关篇为: v62.xx 鸿蒙内核源码分析(文件概念篇) | 为什么说一 ...

  2. 21 BasicTaskScheduler基本任务调度器(一)——Live555源码阅读(一)任务调度相关类

    21_BasicTaskScheduler基本任务调度器(一)——Live555源码阅读(一)任务调度相关类 BasicTaskScheduler基本任务调度器 BasicTaskScheduler基 ...

  3. JDK1.8源码(四)——java.util.Arrays类

    一.概述 1.介绍 Arrays 类是 JDK1.2 提供的一个工具类,提供处理数组的各种方法,基本上都是静态方法,能直接通过类名Arrays调用. 二.类源码 1.asList()方法 将一个泛型数 ...

  4. SpringBoot源码学习1——SpringBoot自动装配源码解析+Spring如何处理配置类的

    系列文章目录和关于我 一丶什么是SpringBoot自动装配 SpringBoot通过SPI的机制,在我们程序员引入一些starter之后,扫描外部引用 jar 包中的META-INF/spring. ...

  5. 43.Permission源码解析和自定义权限类

    drf的权限类位于permission模块   如何确定权限 认证.限流,权限决定是否应该接收请求或拒绝访问 权限检查在视图的最开始处执行,在继续执行其他代码前 权限检查通常会使用request.us ...

  6. 12 哈希表相关类——Live555源码阅读(一)基本组件类

    12 哈希表相关类--Live555源码阅读(一)基本组件类 这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 本文由乌合之众 lym瞎编,欢迎转载 ...

  7. deque源码4(deque元素操作:pop_back、pop_front、clear、erase、insert)

    deque源码1(deque概述.deque中的控制器) deque源码2(deque迭代器.deque的数据结构) deque源码3(deque的构造与内存.ctor.push_back.push_ ...

  8. Mybatis源码解析(三) —— Mapper代理类的生成

    Mybatis源码解析(三) -- Mapper代理类的生成   在本系列第一篇文章已经讲述过在Mybatis-Spring项目中,是通过 MapperFactoryBean 的 getObject( ...

  9. JDK1.8源码阅读笔记(1)Object类

    JDK1.8源码阅读笔记(1)Object类 ​ Object 类属于 java.lang 包,此包下的所有类在使⽤时⽆需⼿动导⼊,系统会在程序编译期间⾃动 导⼊.Object 类是所有类的基类,当⼀ ...

随机推荐

  1. idea 使用debugger技巧

    1,背景 每个开发人员每天都离不开debugger,只要你在编码,就需要调试,作为一个开发快10年的老程序员每天都要写很多代码,当每个人接到任务的时候都会想,这些功能其实很快就能写完,没错,对于写代码 ...

  2. CSS布局(五) 网页布局方式

    网页实质是块与块之间的位置,块挨着块,块嵌套块,块叠着块. 三种关系:相邻,嵌套,重叠. 下面介绍网页布局的常用几种方式 1.一列布局: 一般都是固定的宽高,设置margin : 0 auto来水平居 ...

  3. shell 颜色控制系列

    shell脚本里,经常用的颜色控制,如下 格式:echo -e "\033[字背景颜色:文字颜色m字符串\033[0m" eg:echo -e "\033[41;36m ...

  4. Js常用的函数

    1.用于对正则表达式的函数: var pattern=/\d{3}-\d{2}-\d{4}/;//这里产生的是一个object类型 alert(pattern.test("cscscscs& ...

  5. 高并发关于微博、秒杀抢单等应用场景在PHP环境下结合Redis队列延迟入库

    第一步:创建模拟数据表. CREATE TABLE `test_table` ( `id` int(11) NOT NULL AUTO_INCREMENT, `uid` int(11) NOT NUL ...

  6. Centos下的GitLab的安装汉化和数据备份以及管理员密码重置

    前言: 安装版本:gitlab-ce-8.8.5-ce.1.el7.x86_64.rpm 下载地址: https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yu ...

  7. H3C无线路由器安装与设置

    一.电脑与路由器的连接利用一根cat5e网线一头连接到电脑上笔记本或台式机都可以,另一头连接到无线路由器的LAN口任意LAN口都可以二.设置无线路由器完成路由器安装与电脑连接后,接下首次使用就需要设置 ...

  8. iOS.Animations.by.Tutorials.v2.0汉化(二)

    翻译自:iOS.Animations.by.Tutorials.v2.0 第一节(第1章) 动画属性 现在你已经看到了动画是多么的简单,你可能很想知道你的视图控件是怎么动起来的.本节将给你一个UIVi ...

  9. mysql 主从同步 mysql代理服务器

    搭建mysql主从同步(实现数据自动备份)实例:把主机192.168.4.100的数据库配置为主机192.168.4.99的从数据库 主数据库服务器配置修改配置文件: [root@mysql ~]# ...

  10. shell脚本 awk工具

    awk工具概述awk编程语言/数据处理引擎基于模式匹配检查输入文本,逐行处理并输出通常在shell脚本中,或取指定的数据单独用时,可对文本数据做统计 命令格式格式一:awk [选项] '[条件]{编辑 ...