首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >相当于Java中的python的shelve模块

相当于Java中的python的shelve模块
EN

Stack Overflow用户
提问于 2013-01-23 07:22:58
回答 2查看 937关注 0票数 4

Java中有没有等同于python的shelve模块的模块?我需要它来实现像字典一样的分类数据访问。类字典分类数据访问是将Python对象保存为持久的、易于访问的数据库格式的强大方法。我需要一些相同的东西,但在Java中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-01 04:33:01

我也需要这个,所以我写了一个。有点晚了,但也许会有帮助。

它没有实现close()方法,而只是使用sync(),因为它只在实际写入文件时保持文件打开。

代码语言:javascript
复制
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.HashMap;

public class Shelf extends HashMap<String, Object> {
    private static final long serialVersionUID = 7127639025670585367L;
    private final File file;

    public static Shelf open(File file) {
    Shelf shelf = null;
    try {
        if (file.exists()) {
        final FileInputStream fis = new FileInputStream(file);
        ObjectInputStream ois = new ObjectInputStream(fis);
        shelf = (Shelf) ois.readObject();
        ois.close();
        fis.close();
        } else {
        shelf = new Shelf(file);
        shelf.sync();
        }
    } catch (Exception e) {
        // TODO: handle errors
    }
    return shelf;
    }

    // Shelf objects can only be created or opened by the Shelf.open method
    private Shelf(File file) {
    this.file = file;
    sync();
    }

    public void sync() {
    try {
        final FileOutputStream fos = new FileOutputStream(file);
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(this);
        oos.close();
        fos.close();
    } catch (Exception e) {
        // TODO: handle errors
    }
    }

    // Simple Test Case
    public static void main(String[] args) {
    Shelf shelf = Shelf.open(new File("test.obj"));
    if (shelf.containsKey("test")) {
        System.out.println(shelf.get("test"));
    } else {
        System.out.println("Creating test string.  Run the program again.");
        shelf.put("test", "Hello Shelf!");
        shelf.sync();
    }
    }
}
票数 2
EN

Stack Overflow用户

发布于 2013-01-24 22:39:08

您可以使用像Jackson这样的序列化库,它将POJO序列化为JSON。

来自tutorial的示例

Jackson的org.codehaus.jackson.map.ObjectMapper用于将

数据映射到普通的旧org.codehaus.jackson.map.ObjectMapper对象(“POJO”)。例如,给定JSON数据

代码语言:javascript
复制
{
  "name" : { "first" : "Joe", "last" : "Sixpack" },
  "gender" : "MALE",
  "verified" : false,
  "userImage" : "Rm9vYmFyIQ=="
}

需要两行Java代码才能将其转换为User实例:

代码语言:javascript
复制
ObjectMapper mapper = new ObjectMapper(); // can reuse, share globally
User user = mapper.readValue(new File("user.json"), User.class);

User类如下所示的

(来自Tatu博客上的entry ):

代码语言:javascript
复制
public class User {
    public enum Gender { MALE, FEMALE };

    public static class Name {
      private String _first, _last;

      public String getFirst() { return _first; }
      public String getLast() { return _last; }

      public void setFirst(String s) { _first = s; }
      public void setLast(String s) { _last = s; }
    }

    private Gender _gender;
    private Name _name;
    private boolean _isVerified;
    private byte[] _userImage;

    public Name getName() { return _name; }
    public boolean isVerified() { return _isVerified; }
    public Gender getGender() { return _gender; }
    public byte[] getUserImage() { return _userImage; }

    public void setName(Name n) { _name = n; }
    public void setVerified(boolean b) { _isVerified = b; }
    public void setGender(Gender g) { _gender = g; }
    public void setUserImage(byte[] b) { _userImage = b; }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14469884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档