好的,我有一个名为 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/