我正在尝试为我的GUI保存/加载设置。
到目前为止,我已经使用“属性”进行了保存:
Properties prop = new Properties();
prop.setProperty("a", Boolean.valueOf(boxRandomMouse.isSelected()).toString());
prop.setProperty("b", listModelPath.toString());
我遇到的问题是,我将listModelPath
的{{1}}保存到JList
:
String
在我的文件public static DefaultListModel<String> listModelPath;
下。我找不到任何方法来加载并将此b
解析为我想要的类型listModelPath
。
可以使用下面的约束器初始化类Position
:
Position
或数组:
Position newPos = new Position(int x, int y, int z);
public Position[] toTown = new Position[] {
new Position(3094, 3491, 0), new Position(3088, 3487, 0),
new Position(3080, 3475, 0)};
String
的{{1}}在保存到文件中时的显示方式
listModelPath
我需要弄清楚一种方法来解析上面的String,进入我的位置,或者以某种方式找到一种方法将这个数组保存到文件中,我真的不知道该怎么做。
我尝试过以不同的方式做这件事,总是失败,所以这就是我在这里的原因。 希望你们知道如何处理我在这里的情况。
PS。我刚刚开始阅读有关序列化的内容,或许它是要走的路?它是否允许我将我在应用程序中动态创建的数组保存到文件中而不将其转换为字符串并从字符串返回?
答案 0 :(得分:0)
您可以序列化发送它的listModelPath
对象,然后将其作为对象存档,然后将其作为对象读取,然后将其转换回真实的Class
这可以通过将ObjectOutputSteam
链接到基础流(例如FileOutputStream
,然后将Obejet写入其中Position[]
)来完成
public void writePositions() throws IOException, ClassNotFoundException {
File file = new File("positions.ser");
FileOutputStream outFile = new FileOutputStream(file);
ObjectOutputStream outStream = new ObjectOutputStream(outFile);
public Position[] toTown = new Position[] {
new Position(3094, 3491, 0),
new Position(3088, 3487, 0),
new Position(3080, 3475, 0)};
outStream.writeObject(toTown);
outStream.close();
outFile.close();
}
您可以从写入的文件中读取序列化的Position
数组, positions.ser ,如下所示:
public void readPositions() throws IOException, ClassNotFoundException {
File file = new File("positions.ser");
FileInputStream inFile = new FileInputStream(file);
ObjectInputStream inStream = new ObjectInputStream(inFile);
Position[] toTown = (Position[]) inStream.readObject());
for(int i = 0; i < toTown.length; i++) {
System.out.println(toTown[i]);
}
inStream.close();
inFile.close();
file.delete();
}
您应该注意Position
类应该是Serializable
,否则JVM不允许您将此类型的任何对象来回发送到内存文件中,甚至通过任何内容流。
我不确定我是否已经很好地理解了listModelPath
的主要问题以及它与Position
数组的关系,但你应该提供更多信息,特别是你如何创建listModelPath
实例。
您不仅可以保存一个Object
,还可以保存尽可能多的ClassCastException
。将对象加载回JVM时,应按照写入的顺序读取它们以避免public void writePositions() throws IOException, ClassNotFoundException {
...
public Position[] toTown = new Position[] {
new Position(3094, 3491, 0),
new Position(3088, 3487, 0),
new Position(3080, 3475, 0)};
outStream.writeObject(toTown); //Write the array of Position
boolean selected = boxRandomMouse.isSelected();
outStream.writeObject(selected); //Write the Boolean Object
...
}
public void readPositions() throws IOException, ClassNotFoundException {
...
Position[] toTown = (Position[]) inStream.readObject()); //Read the array of Position which was written first
for(int i = 0; i < toTown.length; i++) {
System.out.println(toTown[i]);
}
boolean selected = (boolean) inStream.readObject(); //Read the Boolean value which was written in the second order
// And so on
...
}
:
{{1}}
答案 1 :(得分:0)