Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.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 如何刷新一个基本的;“数据库”;使用.json文件_Java_Json_Database_List - Fatal编程技术网

Java 如何刷新一个基本的;“数据库”;使用.json文件

Java 如何刷新一个基本的;“数据库”;使用.json文件,java,json,database,list,Java,Json,Database,List,我正在做一个用Java编写的大学项目。该项目由一个体育用品连锁店的小软件组成。我的老师告诉我使用JSON simple.jar将员工信息、运动对象和许多其他东西(商店订单等)保存到JSON文件中。 我的软件在开始时从.json文件加载列表,下面是一个示例: private static ArrayList<Person> personale = new ArrayList<Person>(); public ArrayList<Person> readPers

我正在做一个用Java编写的大学项目。该项目由一个体育用品连锁店的小软件组成。我的老师告诉我使用JSON simple.jar将员工信息、运动对象和许多其他东西(商店订单等)保存到JSON文件中。 我的软件在开始时从.json文件加载列表,下面是一个示例:

private static ArrayList<Person> personale = new ArrayList<Person>();
public ArrayList<Person> readPersonale() throws IOException, org.json.simple.parser.ParseException {
    JSONParser parser = new JSONParser();
    FileReader fileReader = new FileReader("f:\\personale.json");
    JSONObject jsonObject = (JSONObject) parser.parse(fileReader);
    ArrayList<Person> personale = new ArrayList<>();
    JSONArray array = (JSONArray) jsonObject.get("personale");
    for(int i=0; i<array.size(); i++) {
        Person p = new Person();
        JSONObject json = (JSONObject)array.get(i);
        p.setName(json.get("NAME"));
        p.setSurname(json.get("SURNAME"));
        p.setUserCode(json.get("USER CODE"));
        p.setPassword(json.get("PASSWORD"));
        p.setRule(json.get("RULE"));
        personale.add(p);
    }
    fileReader.close();
    return personale;
}
private static ArrayList personalie=new ArrayList();
public ArrayList readPersonale()抛出IOException,org.json.simple.parser.ParseException{
JSONParser=新的JSONParser();
FileReader FileReader=newFileReader(“f:\\personale.json”);
JSONObject JSONObject=(JSONObject)parser.parse(fileReader);
ArrayList personale=新的ArrayList();
JSONArray数组=(JSONArray)jsonObject.get(“personale”);

对于(int i=0;i好的,首先我会避免使用您用于JSON处理的库。手动创建JSONArray等更麻烦,而不是高效。从这个意义上说,我会使用
Jackson
执行任何序列化/反序列化(向数据库写入或从数据库写入)

由于
Jackson
可以主动映射数据类型并转换它们,因此您将使用以下POJO来完成您的工作:

用户数据

public class UserDto {

    private String name;
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }

    private String surName;
    public String getSurName() { return surName; }
    public void setSurName(String surName) { this.surName = surName; }

    private Integer userCode;
    public Integer getUserCode() { return userCode; }
    public void setUserCode(Integer userCode) { this.userCode = userCode; }

    private String rule;
    public String getRule() { return rule; }
    public void setRule(String rule) { this.rule = rule; }

    public UserDto() {}

    public UserDto(String name, String surName, Integer userCode, String rule) {
        this.name = name;
        this.surName = surName;
        this.userCode = userCode;
        this.rule = rule;
    }

    @Override
    public String toString() {
        return "UserDto{" +
            "name='" + name + '\'' +
            ", surName='" + surName + '\'' +
            ", userCode=" + userCode +
            ", rule='" + rule + '\'' +
            '}';
    }

}
BulkUserDto

public class BulkUserDto {

    private List<UserDto> userDtos;
    public List<UserDto> getUserDtos() { return userDtos; }
    public void setUserDtos(List<UserDto> userDtos) { this.userDtos = userDtos; }

}
注意这里的synchronized块,它将确保初始化只发生一次,并且只由第一个调用线程进行


有了这个,我将简单地使用这个缓存来添加/删除用户,最后我将继续并保存这个。注意,如果您选择遵循这个,您应该考虑同步(假设您的程序中有多个线程).

您必须使用您提到的库,还是可以使用其他库?@Aris不,我可以使用任何库,没有限制。请给我一些时间发布另一种方法。也可以发布您用户的JSON示例吗?@Aris非常简单,只有字符串名称、姓氏、规则、用户代码、密码
public class BulkUserDto {

    private List<UserDto> userDtos;
    public List<UserDto> getUserDtos() { return userDtos; }
    public void setUserDtos(List<UserDto> userDtos) { this.userDtos = userDtos; }

}
public final class DatabaseUtil {

    private static final String FILE_PATH = "/tmp/db.json";

    private static ObjectMapper objectMapper = new ObjectMapper();

    private DatabaseUtil() {}

    public static List<UserDto> initUserList() throws IOException {
        BulkUserDto dto = objectMapper.readValue(Paths.get(FILE_PATH).toFile(), BulkUserDto.class);
        return dto.getUserDtos();
    }

    public static void saveUserList(BulkUserDto dto) throws IOException {
        String parsedObject = objectMapper.writeValueAsString(dto);
        if (Files.exists(Paths.get(FILE_PATH))) {
            System.out.println("Found old db file under:: " + FILE_PATH + " deleting");
            Files.delete(Paths.get(FILE_PATH));
        }

        FileWriter writer = new FileWriter(Paths.get(FILE_PATH).toFile());
        writer.write(parsedObject);
        writer.flush();
    }

}
private static final Object LOCK = new Object();
    private static List<UserDto> userCache;
    public static List<UserDto> getUserCache() {
        synchronized (LOCK) {
            if (userCache == null) {
                try {
                    userCache = initUserList();
                } catch (IOException e) {
                    return Collections.emptyList();
                }
            }
            return userCache;
        }
    }