Java- сохранить данные объекта в файл
Я видел много разных постов о том, как вы должны сериализовать объект в файл, и все они по своей природе конфликтуют в том, как это сделать, и каковы лучшие практики. Вот что я пытаюсь сохранить:
public class IHandler{
public double currentLoad;
public String currentPrice;
public String configArgs[];
};
Можно предположить, что размер configArgs известен тем, что мне нужно создать файл, вот что у меня есть до сих пор.
public static void serializeDataOut(IHandler ISH)throws IOException{
String fileName= "Test.txt";
FileOutputStream fos = new FileOutputStream(fileName);
//What do I do here?
}
public static IHandler serializeDataIn(){
//What do I do here?
}
4 ответа
Ну, я полагаю, вы хотите записать объект прямо в файл
public static void serializeDataOut(IHandler ish)throws IOException{
String fileName= "Test.txt";
FileOutputStream fos = new FileOutputStream(fileName);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(ish);
oos.close();
}
public static IHandler serializeDataIn(){
String fileName= "Test.txt";
FileInputStream fin = new FileInputStream(fileName);
ObjectInputStream ois = new ObjectInputStream(fin);
IHandler iHandler= (IHandler) ois.readObject();
ois.close();
return iHandler;
}
Я только что предоставил важный код. Реализуйте это с обработкой исключений.
Пример того, как сериализовать объект:
public static void writeToFile(File path, Database data)
{
try(ObjectOutputStream write= new ObjectOutputStream (new FileOutputStream(path)))
{
write.writeObject(data);
}
catch(NotSerializableException nse)
{
//do something
}
catch(IOException eio)
{
//do something
}
}
public static Object readFromFile(File path)
{
Object data = null;
try(ObjectInputStream inFile = new ObjectInputStream(new FileInputStream(path)))
{
data = inFile.readObject();
return data;
}
catch(ClassNotFoundException cnfe)
{
//do something
}
catch(FileNotFoundException fnfe)
{
//do something
}
catch(IOException e)
{
//do something
}
return data;
}
Для получения дополнительной информации http://docs.oracle.com/javase/tutorial/jndi/objects/serial.html
Вы можете использовать XMLDecoder/XMLEncoder для сериализации JavaBean в формате xml. Вот примеры из Javadocs оракула по двум классам:
(XMLDecoder)
XMLDecoder d = new XMLDecoder(
new BufferedInputStream(
new FileInputStream("Test.xml")));
Object result = d.readObject();
d.close();
(XMLEncoder)
XMLEncoder e = new XMLEncoder(
new BufferedOutputStream(
new FileOutputStream("Test.xml")));
e.writeObject(new JButton("Hello, world"));
e.close();
Обратите внимание, что вам нужно добавить геттеры и сеттеры и сделать сериализуемый класс.
Вы хотите записать IHandler в файл test.txt? пытаться
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.write(IHandler);
если вы хотите прочитать IHandler из этого файла, нужно сделать это
ObjectInputStream ois = new ObjectInputStream(fos);
IHandler iHandler = (IHandler) ois.readObject();