vfs基本操作(待继续补全)
Posted Steady_Man
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vfs基本操作(待继续补全)相关的知识,希望对你有一定的参考价值。
vfs简介:
(1)vfs是使用一张数据库表模拟了本地磁盘存储,文件内容都是存在数据库中的,并没有创建本地磁盘文件
(2)调用 VfsCreateFactory.java 中的 getVfs方法,可以获得Vfs2对象。vfs的数据库表会在系统启动时初始化。
(3)主要不是学习vfs数据库表怎么实现的,主要是学习vfs文件怎么使用的,学会使用 Vfs2 / VfsFile2 两个接口的使用
代码实现基本操作:
package com.esen.abistudy.vfs;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import com.esen.ecore.vfs.VfsCreateFactory;
import com.esen.vfs2.Vfs2;
import com.esen.vfs2.VfsOperator;
import com.esen.vfs2.impl.VfsOperatorImpl;
import com.esen.util.StmFunc;
import com.esen.util.StrFunc;
import com.esen.vfs2.VfsFile2;
/**
* vfs学习的例子
*
* @author admin
* @since Aug 16, 2018
*/
public class TestVfs extends BaseSpringBootTest {
/**
* 创建Vfs2实例的类,可以通过创建此类的一个对象来创建Vfs2对象
*/
@Autowired
private VfsCreateFactory vfsFactory;
/**
* vfs操作用户,实际应该根据登录用户来,学习期间此处暂时写死
*/
private VfsOperator admin = new VfsOperatorImpl("admin", true);
/**
* 导入本地的一个txt文件,导入到vfs上
*/
public void testVfs() {
Vfs2 vfs = vfsFactory.getVfs();
//案例一:在vfs上创建一个文件夹data,文件夹下面创建一个文件data.txt
VfsFile2 dir = vfs.getVfsFile("/data", admin);
dir.createDir();
VfsFile2 file = vfs.getVfsFile("/data/data.txt", admin);
file.createFile();
//案例二:导入本地的磁盘文件,将C盘的text.txt文件导入到vfs上的import文件夹下面
VfsFile2 infile = vfs.getVfsFile("/import", admin);
infile.importFile(new File("C:\\\\text.txt"));
}
/**
* 读取vfs上文件的内容
* @throws IOException
*/
public void testRead() throws IOException {
Vfs2 vfs = vfsFactory.getVfs();
//根据路径获得一个VfsFile2文件,拿到文件的InputStream流
VfsFile2 file = vfs.getVfsFile("/DATA.txt", admin);
InputStream input = file.getInputStream();
try {
//从流中读取一行文件内容
StmFunc.readLine(input, StrFunc.GBK);
} finally {
//记得关闭流
input.close();
}
}
}
如实现将文件数据读取vfs,并且将vfs的所有数据写入数据库操作如下:
package com.esen.abistudy.orm.service;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.GregorianCalendar;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.esen.abistudy.orm.dao.ScoreRepository;
import com.esen.abistudy.orm.entity.ScoreEntity;
import com.esen.ecascore.util.UNID;
import com.esen.ecore.service.AbstractService;
import com.esen.ecore.vfs.VfsCreateFactory;
import com.esen.util.StmFunc;
import com.esen.util.StrFunc;
import com.esen.vfs2.Vfs2;
import com.esen.vfs2.VfsFile2;
import com.esen.vfs2.VfsOperator;
import com.esen.vfs2.impl.VfsOperatorImpl;
@Service
public class ScoreService extends AbstractService<ScoreEntity>{
@Autowired
private ScoreRepository scoreRepository;
/**
* 创建vfs2实例的类对象,通过此类的一个对象来创建vfs2对象
*/
@Autowired
private VfsCreateFactory vfsFactory;
/**
* vfs操作用
*/
private VfsOperator admin = new VfsOperatorImpl("zhoulm",true);
/**
* 数据文件导入vfs
*
*/
public void import2vfs(InputStream inputStream, String parentDir, String fileName) {
Vfs2 vfs = vfsFactory.getVfs();
//导入本地的磁盘文件,D:\\document\\dataImport.txt
VfsFile2 infile = vfs.getVfsFile(parentDir, admin);
infile.importStm(inputStream,fileName);
}
/**
* 将vfs中的数据写入数据库
* @param filePath 文件路径
* @throws IOException
*/
public void vfs2db(String filePath) throws IOException{
Vfs2 vfs = vfsFactory.getVfs();
List<ScoreEntity> list = new ArrayList<>();
//根据路径获得一个VfsFile2文件,然后拿到文件的InputStream流
VfsFile2 file = vfs.getVfsFile(filePath, admin);
InputStream input = file.getInputStream();
try {
//从流中遍历读取每一行记录
String strRead =null;
String[] strArr = null;
String date=null;
while((strRead = StmFunc.readLine(input, StrFunc.UTF8) )!= null ) {
if(strRead.contains("考试日期")) {
strArr = strRead.split(":");
date = strArr[1];
continue;
}
if (strRead.contains("姓名")) {
continue;
}
if (strRead.length()==0) {
continue;
}
//以“,”拆为字符串数组
strArr = StrFunc.analyzeStr(strRead);
//将每一行记录转化为每一个entity
ScoreEntity scoreEntity = new ScoreEntity(UNID.randomID(),StrFunc.parseCalendar(date, new GregorianCalendar()),strArr[0],strArr[1],StrFunc.str2float(strArr[2],0));
//将entity存入到list中
list.add(scoreEntity);
}
//调用Repository中的insertBatch方法,将list添加到数据库表中
scoreRepository.insertBatch(list);
} finally {
//关闭流
input.close();
}
}
}
以上是关于vfs基本操作(待继续补全)的主要内容,如果未能解决你的问题,请参考以下文章