今天看了一个文件管理的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. [记录]CentOS搭建SVN服务器(主从同步)

    CentOS搭建SVN服务器(主从同步)1.安装步骤如下: 1)安装: #yum install subversion 2)查看安装位置: #rpm -ql subversion 3)查看版本: #/ ...

  2. npm注意事项(附带Vue-cli安装)

    下载完nodeJS后,可选择更改配置目录 1.npm config set prefix "D:\node\node-global"<!--配置全局安装目录--> 2. ...

  3. 手把手教你树莓派实现简易室内监控系统(A)

    第一次写博文,有很多疏漏之处,然后受逼乎影响较深,希望大家多多包涵! _______________________________________________分割线是这样画的吧_________ ...

  4. css的一些复习

    css,全称Cascading Style Sheets,层叠样式表. css选择器是从右往左解析的,解析速度会比较快. 选择器 选择器权重 !important 优先级最高 元素属性 优先级高 相同 ...

  5. nyoj44 子串和 线性DP

    线性DP经典题. dp[i]表示以i为结尾最大连续和,状态转移方程dp[i] = max (a[i] , dp[i - 1] + a[i]) AC代码: #include<cstdio> ...

  6. 文本处理三剑客之grep&正则表达式

    grep是一个文本过滤工具,它支持正则表达式,能把搜索匹配到的行打印出来.grep的全称是Global Regular Expression Print(全局正则表达式)使用权限是所有用户. 一.gr ...

  7. jQuery手机发送验证码倒计时代码

    <!DOCTYPE> <html> <head> <meta charset="UTF-8"> <script type=&q ...

  8. PaddlePaddle︱开发文档中学习情感分类(CNN、LSTM、双向LSTM)、语义角色标注

    PaddlePaddle出教程啦,教程一部分写的很详细,值得学习. 一期涉及新手入门.识别数字.图像分类.词向量.情感分析.语义角色标注.机器翻译.个性化推荐. 二期会有更多的图像内容. 随便,帮国产 ...

  9. GetWindowRect、GetClientRect、ScreenToClient与ClientToScreen

    GetWindowRect是取得窗口在屏幕坐标系下的RECT坐标(包括客户区和非客户区),这样可以得到窗口的大小和相对屏幕左上角(0,0)的位置. GetClientRect取得窗口客户区(不包括非客 ...

  10. Linux 的进程状态

    (1)运行:当一个进程在处理机上运行时,则称该进程处于运行状态.处于此状态的进程的数目小于等于处理器的数目,对于单处理机系统,处于运行状态的进程只有一个.在没有其他进程可以执行时(如所有进程都在阻塞状 ...