一、接口

二、资源仓库模块

三、工具类ResourceIOUtils

 

ResourceIOUtils包含了日常文件读写的静态方法,在资源文件模块未启动时,ResourceIOUtils处于孤立模式,此时ResourceIOUtils的读写和本地文件读写没有区别。当资源文件模块启动后,ResourceIOUtils会根据路径识别是否需要到资源仓库读写:

1、使用时,由于实际存储的不确定性,资源仓库并没有完全覆盖WEB-INF下所有的文件读写,只包含reportlets、resources、asserts、plugins、schedule等文件夹,因此直接使用ResourceRepository可能会造成混乱。因此提供了ResourceIOUtils提供屏蔽资源仓库的手动选择。

2、ResourceIOUtils首先会根据传入的路径,根据路径指向的文件夹,选择是否在资源仓库读写。例如,资源文件存储在FTP服务器,而logs、libs等都放在本地,当向一个非资源文件写入时,会调用本地文件系统的FileSystemRepository,当读取一个报表时则会从FTPResourceRepository读。

3、公有方法描述:

方法名称作用描述返回值/参数说明
renameTo
重命名
close
关闭流等
copy
复制源路径和目标路径应该处于同一个存储下
createFile
创建文件若已经存在返回false
createDirectory
创建文件夹自动连续创建,没有mkdir和mkdis区别
isDirectory
是否是文件夹
getName
获取文件或文件夹名称
exist
文件或文件夹是否存在
list
列出文件夹下的内容名称返回的是文件名列表
listWithFullPath
列出文件夹下内容的路径返回的是文件的绝对路径列表
isDirectoryExist
文件夹是否存在
read
读取文件流
readBytes
读取到byte[]
write
接受InputStream、byte[]、String类型的数据
delete
删除文件或文件夹
getParent
获取文件或文件夹父路径
inputStream2String
InputStream转String
inputStream2Bytes
InputStream转byte[]
readFileFromRepoToLocal
从资源仓库读取文件到本地若不指定本地文件夹,会自动指定一个
readDirFromRepoToLocal
从资源仓库读取文件夹到本地若不指定本地文件夹,会自动指定一个
unzip
解压压缩文件可以在本地也可以在资源仓库



四、规范约束

ResourceRepository作为一个通用的资源仓库,并没有规定路径的名称,不仅仅可以读写资源文件,其它存在仓库中的文件同样可以访问。

1、资源仓库必须规定资源工作目录,比如在FTP中,需要一个工作目录,目录下包含./reportlets/、.//resources/、./plugins/、./asserts、./bireport等目录。

2、读写,建议所有文件操作全部使用相对路径(相对WEB-INF路径)

    a、如果要访问某个资源文件,如read("/reportlets/xxx.cpt"),会自动将路径拼接成workroot + /reportlets/xxx.cpt;

    b、如果要访问某个WEB-INF下的非资源文件,比如finedb/db.properties,会自动转化成workroot+ /finedb/db.properties;

    c、如果使用绝对了路径,如/Users/rinoux/FineProjects/finereport-ft/env/WebReport/WEB-INF/reportlets/xxx.cpt,还是会去读绝对路径;

五、注意事项

ResourceIOUtils的所有操作方法,均是提供给本地环境使用的,如果设计到远程设计环境,希望在远程设计的客户端,可读读取到服务端的某些资源,需要使用


com.fr.workspace.resource.WorkResource rs = com.fr.workspace.WorkContext.getWorkResource();

 在获取到WorkResource对象后,再调用响应的读取文件的方法。