Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于大量文件的Java内容API_Java - Fatal编程技术网

用于大量文件的Java内容API

用于大量文件的Java内容API,java,Java,有人知道有哪些java库(开源)提供了从磁盘处理大量文件(写/读)的功能。我说的是200-400万个文件(其中大部分是pdf和ms文档)。将所有文件存储在一个目录中不是一个好主意。与其重新发明轮子,我希望它已经被许多人完成了 我正在寻找的功能 1) 能够从磁盘写入/读取文件 2) 能够为新文件创建随机目录/子目录 2) 提供版本/审核(可选) 我在看JCR API,它看起来很有前途,但它从一个工作区开始,不确定当有许多节点时性能会如何。将java.io包中的功能与您自己的自定义解决方案结合起来。

有人知道有哪些java库(开源)提供了从磁盘处理大量文件(写/读)的功能。我说的是200-400万个文件(其中大部分是pdf和ms文档)。将所有文件存储在一个目录中不是一个好主意。与其重新发明轮子,我希望它已经被许多人完成了

我正在寻找的功能 1) 能够从磁盘写入/读取文件 2) 能够为新文件创建随机目录/子目录 2) 提供版本/审核(可选)


我在看JCR API,它看起来很有前途,但它从一个工作区开始,不确定当有许多节点时性能会如何。

java.io
包中的功能与您自己的自定义解决方案结合起来。

java.io
包可以从磁盘写入和读取文件,并为新文件创建任意目录或子目录。不需要外部API

版本控制或审核必须与您自己的自定义解决方案一起提供。有很多方法可以解决这个问题,你可能有一个需要满足的特殊需求。特别是如果您关心开源API的性能,那么很可能只需编写一个专门适合您需要的解决方案,就可以获得最佳结果

听起来您的模块应该在启动时扫描所有文件,并形成所有可用文件的索引。基于用于共享和索引这些文件的方法,它可以每隔一段时间重新扫描这些文件,或者您可以对其进行编码,以便在新文件或版本可用时从某个中央服务器接收消息。当有人请求文件或提供新文件时,您的模块将确切地知道它是如何组织的,以及在目录树中从何处获取或放置文件


看起来,根据您的需求设计一个解决方案要容易得多。

编辑:JCP看起来确实不错。我建议您尝试一下,看看它在您的用例中的实际表现

如果您在Windows上运行系统,并且在某个时候注意到一个可怕的n^2性能损失,那么您可能遇到了自动生成8.3文件名所带来的性能损失。当然可以,但正如您所指出的,在单个目录中存储大量文件仍然不是一个好主意

我见过处理大量文件的一种常见策略是为文件名的前n个字母创建目录。例如,document.pdf将存储在d/o/c/u/m/document.pdf中。我不记得曾经见过用Java实现这一点的库,但它似乎非常简单。如果需要,您可以创建一个数据库来存储查找表(将键映射到均匀分布的随机文件名),这样您就不必每次启动时都重新生成索引。如果您想获得自动重复数据消除的好处,可以散列每个文件的内容,并使用该校验和作为文件名(但您还需要添加一个校验,这样即使内容实际上不同,也不会意外丢弃校验和与现有文件匹配的文件)

根据文件的大小,您也可以考虑将文件本身存储在数据库中——如果您这样做,添加版本控制将是微不足道的,并且您不必创建随机文件名,因为您可以使用自动生成的主键引用它们。