java - 在 RandomAccessFile 中保存枚举

标签 java enums randomaccessfile

好的,我有一个名为 Encuadernacion.java 的类

public enum Encuadernacion {
    NONE("Ninguno"),
    RUSTICA("Rustica"),
    CARTONE("Cartone"),
    PIEL("Piel"),
    ESPIRAL("Espiral"),
    GRAPADA("Grapada");

    private final String ENCUADERNAR;

    Encuadernacion(String descripcion){
        this.ENCUADERNAR = descripcion;
    }
    public String getDescripcion(){
        return ENCUADERNAR;
    }
}

然后创建名为 Libro.java

的图书
public class Libro implements Serializable{
    private Encuadernacion encuadernado;
    public void setEncuadernado(int encuadernar){
        this.encuadernado = Encuadernacion.values()[encuadernar];
        //this encuadernar index is handled on another class.
    }
    public String getEncuadernacion(){
        return encuadernado.getDescripcion();
     }
        @Override
        public String toString(){
            return encuadernado.getDescripcion();
        }

然后是名为Test.java的主类

public class Test{
    public static void main(String[] args)throws IOException{
        RandomAccessFile fichero = null;
        try {
                fichero = new RandomAccessFile("BIBLIO.DAT", "rw");

        }catch (FileNotFoundException e){
            System.out.printf("Mensaje: %s", e.getMessage());
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

当我将枚举写入BIBLIO.DAT时,它会被写入为字符串,直到这一步为止都没有问题。但当我想读它时,我会一边读这些文字一边创作一本新书。 Listar.java

    public class Listar {
        public static void lista(RandomAccessFile fichero)throws IOException, ClassNotFoundException{    
            try{
                while(true){
                    Libro libro=new Libro();
                    libro.setEncuadernado(fichero.readUTF());
                    System.out.println(libro.toString());
                }
        }catch(EOFException e){
            if(fichero!=null) fichero.close();
        }
    }
}

在此 libro.setEncuadernado(fichero.readUTF()); 这是不可能的,因为这必须是来自 Encuadernacion SOMETHING; 的值 我该如何解决这个问题?将此字符串转换为枚举值,或者以不同的方式将枚举写入 BIBLIO.DAT,但 RandomAccessFile 没有方法可以做到这一点。

为了更好地阅读,代码被删减。

最佳答案

我认为值得尝试:

public void setEncuadernado(String encuadernar){
    this.encuadernado = Encuadernacion.valueOf(encuadernar);
    //this encuadernar index is handled on another class.
}

在 Libro 类中。但由于您的代码不是 MCVE ,我没有测试过。

关于java - 在 RandomAccessFile 中保存枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30288395/

相关文章:

c++:使用 "enum class"在类内部枚举

java - 文件支持的 Java 映射

java - 在java中对ArrayList与日期进行排序

java - 使用 jquery 打开新窗口

c++ - 前向声明 : incomplete type 'enums::Category' used in nested name specifier 有问题

python - 为什么定义顺序在 python2 中不可用?

java - 尽管文件存在,但 FileNotFoundException

java - 如何从随机访问文件中读取 base64 字符串 (Android)

java - 在公共(public)电子邮件中添加附件作为流

java - 如何在 Netbeans 中恢复 java 文件以前的格式