All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.dounine.clouddisk360.parser.JSONBianary Maven / Gradle / Ivy

package com.dounine.clouddisk360.parser;

import com.alibaba.fastjson.JSONReader;
import com.alibaba.fastjson.JSONWriter;
import com.dounine.clouddisk360.exception.CloudDiskException;
import com.dounine.clouddisk360.parser.deserializer.login.LoginUserToken;
import com.dounine.clouddisk360.store.BasePathCommon;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class JSONBianary {

	private static final Logger LOGGER = LoggerFactory.getLogger(JSONBianary.class);

	private String bianaryFilename;
	protected LoginUserToken loginUserToken;

	public String getBianaryFilenamePath(){
		return new StringBuffer(BasePathCommon.BASE_PATH).append(loginUserToken.getAccount()).append(File.separator).append(bianaryFilename).toString();
	}

	public  void writeObjToDisk(T obj) {
		if (StringUtils.isNotBlank(bianaryFilename)) {
			File file = new File(getBianaryFilenamePath());
			if (!file.exists()) {
				file.getParentFile().mkdirs();
			}
			JSONWriter jsonWriter = null;
			FileWriter fileWriter = null;
			try {
				fileWriter = new FileWriter(file);
				jsonWriter = new JSONWriter(fileWriter);
				jsonWriter.startObject();
				jsonWriter.writeObject(obj);
				jsonWriter.endObject();
				jsonWriter.flush();
				LOGGER.info("文件 { " + file.getName() + " } 写入位置" + file.getAbsolutePath());
			} catch (IOException e) {
				e.printStackTrace();
			} finally {
				try {
					if(null!=fileWriter){
						fileWriter.close();
					}
					if(null!=jsonWriter){
						jsonWriter.close();
					}
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}

	public  T readObjForDisk(Class clazz) {
		if (StringUtils.isNotBlank(bianaryFilename)) {
			File file = new File(getBianaryFilenamePath());
			if (!file.exists()) {
				LOGGER.error("读取的文件:[ " + file.getAbsolutePath() + " ]不存在,自动创建一个空文件");
				file.getParentFile().mkdirs();
				try {
					file.createNewFile();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}else{
				try {
					if(FileUtils.readFileToString(file).length()>2){//判断文件里面是否包含有数据
						JSONReader jsonReader = null;
						FileReader fileReader = null;
						T t = null;
						try {
							fileReader = new FileReader(file);
							jsonReader = new JSONReader(fileReader);
							jsonReader.startObject();
							t = jsonReader.readObject(clazz);
							jsonReader.endObject();
						} catch (IOException e) {
							e.printStackTrace();
						} finally {
							if(null!=fileReader){
								fileReader.close();
							}
							if(null!=jsonReader){
								jsonReader.close();
							}
						}
						return t;
					}
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			return null;
		}
		throw new CloudDiskException("读取的对象文件位置与文件名不能为空");
	}

	public  void writeListToDisk(List lists) {
		if (StringUtils.isNotBlank(bianaryFilename)) {
			File file = new File(getBianaryFilenamePath());
			if (!file.exists()) {
				file.getParentFile().mkdirs();
			}
			JSONWriter jsonWriter = null;
			FileWriter fileWriter = null;
			try {
				fileWriter = new FileWriter(file);
				jsonWriter = new JSONWriter(fileWriter);
				jsonWriter.startArray();
				lists.forEach(jsonWriter::writeObject);
				jsonWriter.endArray();
				jsonWriter.flush();
			} catch (IOException e) {
				e.printStackTrace();
			} finally {
				try {
					if(null!=fileWriter){
						fileWriter.close();
					}
					if(null!=jsonWriter){
						jsonWriter.close();
					}
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}

	public  List readListForDisk(Class clazz) {
		List lists = new ArrayList<>(0);
		if (StringUtils.isNotBlank(bianaryFilename)) {
			File file = new File(getBianaryFilenamePath());
			if (!file.exists()) {
				throw new CloudDiskException("读取的文件:[ " + file.getAbsolutePath() + " ]不存在");
			}
			JSONReader jsonReader = null;
			FileReader fileReader = null;
			try {
				fileReader = new FileReader(file);
				jsonReader = new JSONReader(fileReader);
				jsonReader.startArray();
				while (jsonReader.hasNext()) {
					lists.add(jsonReader.readObject(clazz));
				}
				jsonReader.endArray();
			} catch (IOException e) {
				e.printStackTrace();
			} finally {
				if(null!=fileReader){
					try {
						fileReader.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
				if(null!=jsonReader){
					jsonReader.close();
				}
			}
			return lists;
		}
		throw new CloudDiskException("读取的对象集合文件位置与文件名不能为空");
	}

	public void setBianaryFilename(String bianaryFilename) {
		this.bianaryFilename = bianaryFilename;
	}

	public LoginUserToken getLoginUserToken() {
		return loginUserToken;
	}

	public void setLoginUserToken(LoginUserToken loginUserToken) {
		this.loginUserToken = loginUserToken;
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy