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基本操作(待继续补全)的主要内容,如果未能解决你的问题,请参考以下文章

C#VS快捷键

C#VS快捷键

C#VS快捷键

Atom编辑器折腾记_(15)JS代码片段补全(插件:javascript-snippets)

python代码补全工具Kite

VFS - 虚拟文件系统基本操作方法的封装