Re: Writting Objects to a file

[Discover the secrets of the Java Serialization API|http://java.sun.com/developer/technicalArticles/Programming/serialization/]

When an ObjectOutputStream is initialised it writes a stream header before any object data is written. An ObjectInputStream, correspondingly, reads this header when the stream is opened.
Closing an output stream attached to a file and then some time later reopening it again for append will write a new stream header after the first batch of data. When ObjectInputStream encounters this it will croak because it is expecting the start of a new object, not a new stream. Thus, what you are doing is illegal.
Assuming you want to write and then append later (that is the collection idea is not appropriate) the only way to fix this is to rewrite the existing data to a new file and then append the new data.

Similar Messages

  • What is the best combination of read and write objects to binary files ...

    Hi everyone,
    what are the best combination of read and write objects to read/write a record of customers from a binary file. I should be able to use StringTokenizer. I am bit confused with all these Stream reader and writers.
    abdul

    You are, indeed, confused:
    o StreamTokenizer works on character input, not binary input.
    o Readers and Writers in general work on character streams, not binary.
    That leaves you various input streams and output streams for reading binary data.

  • Best way to write objects in an xml and send the file?

    hello all
    i am making some objects, which i conver to xml using the XStream and then i am saving them to a file, call a function to send the file to a servant (basically i do this by sending bytes and this may be the problem). In the servant i take the data i write them to a file and then i read them again to make them objects...
    i have the following code in the client
            XStream xstream = new XStream(new DomDriver());     
            xstream.alias("Jobb", WorkflowFramework.Jobb.class);
         String xml = xstream.toXML(translation);
               FileWriter fw = new FileWriter("translation.xml");
               ObjectOutputStream out = xstream.createObjectOutputStream(fw);
               out.writeObject(new Jobb("ougk2", "Walnes",null));
               out.close();
               File file=new File("translation.xml");
               byte buffer[]=new byte[(int)file.length()];
               try {
                    BufferedInputStream input=new BufferedInputStream(new FileInputStream("translation.xml"));
                    input.read(buffer,0,buffer.length);
                    input.close();
               } catch(Exception e) {
                      System.out.println("Error: "+e.getMessage());
                       e.printStackTrace();
               theRemoteObjRef.translationService(theCallbackObjectRef, buffer);i write the file and then i read it so as to have a buffer of bytes (there should be a better ways..)
    the last line sends an objectRef (we dont care about that) and the file in bytes to a server (to be specific to a servant of a server)..
    in the servant i do the following
    public void translationService(TheCallbackInterface objRef, byte data[]){
              try{
                        File file = new File("translation2.xml");
                    BufferedOutputStream output = new BufferedOutputStream(new FileOutputStream("translation2.xml"));
                  output.write(data, 0, data.length);
                  output.flush();
                  output.close();
              } catch(Exception e) {
                        System.out.println("Error: " + e.getMessage());
                        e.printStackTrace();
               XStream xstream = new XStream(new DomDriver());
               try { // If an error occurs, go to the "catch" block
                    FileReader fr2 = new FileReader("translation2.xml");
                    ObjectInputStream in = xstream.createObjectInputStream(fr2);
                    Jobb newJob = (Jobb)in.readObject();
                   System.out.println(newJob.getObjServerRef());
                   System.out.println(newJob.getForTranslation());
                   System.out.println(newJob.getTranslated());
                    }catch (Exception e) {  
                         System.err.println("File input error"+e);
                    Jobb testJob=new Jobb("ougka","mpougka","falalala");
                    System.out.println(testJob.getObjServerRef());
                       System.out.println(testJob.getForTranslation());
                    System.out.println(testJob.getTranslated());
    the problem is that in the first group of System.out.println i get the error File input errorcom.thoughtworks.xstream.mapper.CannotResolveClassException: Jobb : Jobb
    but the second group of printlns, prints the correct results...
    do you know what is the problem? Why can i read the content of the file and get the objects from there?
    do you have any suggestions of writing and reading the file in an another way or to send it by NOT using a bytes array?
    do you have an alternative way of making the xml file?
    many thanks!

    Hi,
    I would suggest to reconsider building of your document so that it doesn't contain duplicates if you don't need them. And it doesn't have much to do with DB XML then.
    Also you could insert your document with duplicates and use XQuery Update facilities to delete undesirable nodes.
    Vyacheslav

  • Cant write an image contained object to a file

    HI, I am trying to save Vector object to a file which contains an image as one element.But i am not able to do that can anybody tell how to write the program.
    i wrote the following program to do that task. but it's not working
    can anybody tell what changes i have to make my program to work properly
    my code as follows
    import java.util.*;
    import java.io.*;
    import java.awt.*;
    class ImageWrit implements Serializable
    Image img;
    public ImageWrit(){
    img= Toolkit.getDefaultToolkit().getImage("a9.bmp");
    class A{
    public static void main(String s[])
    FileOutputStream fout;
    ObjectOutputStream out ;
    Vector list = new Vector();
    list.add(new ImageWrit());
    try{
    fout = new FileOutputStream("a.txt");
    out = new ObjectOutputStream(fout);
    out.writeObject(list);
    System.out.println("object is saved");
    catch(Exception e)
    System.out.println("error");
    }

    It's easier to read your code (and help) when you use the code tags in you message...
    it's also helpfull to know why you are not able to do it, compiler error, or runtime error, or...
    third it's best to show a StackTrace in case of an Exception, like thatcatch(Exception e)
        System.out.println("error"); // this tell nothing about the Exception
        e.printStackTrace();
    }Maybe your problem is that the Image returned by ToolKit is not Serializable, you can search the internet for something like "java serializable image" for some hints... like making an ImageIcon of the image, which will be Serializable
        public ImageWrit() {
            img = new ImageIcon(Toolkit.getDefaultToolkit().getImage("a9.bmp"));
        }(also have a look at javax.imageio.ImageIO)

  • Write object to file

    Just wondering if there is a faster way to do this.
    Is is possible to have a file stream read and write an entire object? Right now i have a flie that each line represents a variable within the object. i.e. my class is say, blah... 1st readline = blah.name; 2nd readline = blah.password; is it possible to just write the entire object/class at once, and read it all at once so i don't have to read each file and have the subroutine to know which line means what?

    You can write an object to the file and read back the object provided the object should be of a class which implements serializable. You can use the ObjectOutputStream to write the object and ObjectInputStream to read the object.
    Ajit

  • How to write an object to a file.

    I have a LinkedList called my data. Is there a way to write this object to a file instead of having to convert the data to delimited string values and storing it in a sequential file?

    this is how i write and read objects to a file:
         public void write() {
              try {
                   oos = new ObjectOutputStream(new FileOutputStream(fileName));
                   oos.writeObject(data);
                   oos.flush();
                   oos.close();
              } catch (Exception e) {
                   System.out.println(e.toString());
         public void read() {
              try {
                   ois = new ObjectInputStream(new FileInputStream(fileName));
                   data = (LinkedList)ois.readObject();
                   ois.close();
              } catch (FileNotFoundException fnf) {
                   System.out.println("noFileFound");
              } catch (Exception e) {
                   System.out.println(e.toString());

  • How can I write relative path in File, ImageIcon objects

    I have downloaded examples from
    http://java.sun.com/docs/books/tutorial/uiswing/components/example-swing/index.html
    but for some reason images are invisible until I write absolute paths?(I use windows) How can I write relative path in File, ImageIcon objects?

    Hello;
    I've found a lot of complaints about this through the Forte forum as well as on Dejanews. I'm just curious as to whether any of you ended up finding a solution to this problem.
    There was one posting about setting up the subdirectory as a URL rather than a String and then using that as the source of the ImageIcon ... but this didn't work for me.
    Any help whatsoever would be appreciated.
    Thanks!

  • Why would i write objects to file?

    Im seeing a lot of about wrinting objects to file, but �til now, i don�t know why.
    I�d be glad if you guys say sometinhg about it: if you use, why.
    Maybe i shloud be using , but i did�t know why...
    Tks.
    Bruno

    Mostly the "file" is not really a file, but a communications channel between two java processes. I worked on a client/server system that put serialised java objects in HTTP messages. Worked great.
    Or you might temporarily cache objects to a file for memory reasons (eg: a web server that handles thousands of live connecitons). Writing to a file for persistsence is of limited use because little things can make them un-deserialisable. Better off using XML for persistence.

  • Data Acquisition - using local variables to write data to a file

    Hello,
    I am running a Data Acquisition vi (currently in LabVIEW 7.1 but soon to be updated to 8.2) that collects ~100 parameters of data from several sources contained in a while loop. The current configuration (which I did not write) uses very few subVIs and writes to ~100 local variables to store each parameter. It then reads all the local variables and builds an array of all the strings, converts then to a spreadsheet string, then uses the write characters to file function to append to a datafile. I am trying to clean things up and have came up with subVIs to collect the data from the following sources:
    8 serial port sources collecting btwn 8 and 20 parameters each
    ~15 thermocouple readings
    ~10 analog inputs
    ~20 parameters read off an ARINC 429 bus.
    I have come up with a subVI to read each of the sources and have placed the subVIs in the while loop. Each subVI outputs the data that it collects in array or cluster form. I was wondering how best to write each parameter to a CSV file at between 1 and 10 Hz. Should I write each subVI output to a LV and then read them off as was done before (the difference being that I have reduced the # of LVs to ~10 vs >100?
    I should add that precise timing is not that important, so if all the subVIs are not collecting simultaneously (which I understand that they won't be), it does not really matter.
    Thanks.

    Hi jilla,
    jilla wrote:
    What I think that you are saying is to turn the outputs of the 4 subVIs into inputs of a 5th subVI that writes to the data file. Correct?
    Yes.  It may sound like a fine-point, but I beileve it's better to create a VI specifically for formatting data - in your example, 4 arrays IN, a single string OUT.  Then write the string to file as a seperate operation.  GUI-displayed data can go through a similar transformation, the four arrays wired to a subVI which builds output-structures specifically for display.  It's a beginner's mistake to put lots of individual controls and indicators on the screen when groups of them are naturally related (in an object-oriented sense.)  Use clusters to group related controls - this will keep the diagram much cleaner.
    One more question: at what point (either # of data points or frequency of data collection) does it become necessary to use queues? Thanks.
    Well, there's not really a clearly definable "point".  I'd say if your update-rate climbs above 100Hz, or you witness poor program or system performance, then it's time.  The scenario you've described is a fairly simple acquire/display&log loop - and simple is good.   Then-again people can't see/react-to updates faster than about 10Hz - so it doesn't make sense to sacrifice performance - if performance becomes an issue.
    Re: queues:  Queues are sometimes used to buffer data that's "produced" in one place and "consumed" in another.
    Here, if/when logging data, you're logging with every DAQ.  I wouldn't recommend using a queue to transport data from a "DAQ loop" to a "Logging-loop" - those functions can be in the same loop.  Should/could a queue be used to get data from a "DAQ loop" to update the GUI at a lower frequency?  Sure, but a Notifier might be a better choice.   Further, in the (simple?) program you've described, you might use a case structure (True/False) to only update FP indicators every "X" iterations - a simple solution that doesn't require Queues or Notifiers.
    Cheers!
    "Inside every large program is a small program struggling to get out." (attributed to Tony Hoare)

  • Save different Objects in one file by two different streams

    Hi all,
    I have a issue to read two Objects from one file if I write those in two different streams.
    I open the ObjectOutputStream and save an Object to the file. Then I close this stream and file. Then I open the new ObjectOutputStream and save the second Object in the same file. It works Ok. Then I open the ObjectInputStream and try to read those two objects and get java.io.StreamCorruptedException.
    This exception happes only when app tryes to read the second Object.
    this is the code example:
    //Write part
    for (int i=0;i<2;i++)
    File file = new File("test.swp");
    FileOutputStream fileOut = new FileOutputStream(file,true);
    ObjectOutputStream objOut = new ObjectOutputStream(fileOut);
    JobObject jobObj = new JobObject();
    jobObj.setID(i);
    objOut.writeObject(jobObj);
    objOut.flush();
    objOut.close();
    fileOut.close();
    //Read part
    FileInputStream fileOut = new FileInputStream("test.swp");
    ObjectInputStream objOut = new ObjectInputStream(fileOut);
    for (int i=0;i<2;i++)
    JobObject jobObj = (JobObject)objOut.readObject();
    objOut.close();
    fileOut.close();
    Thank for any help.

    Maybe try closing the ObjectInputStream (and re-creating it as needed) within your for loop?
    - Saish
    "My karma ran over your dogma." - Anon

  • I receive the follwing error message when trying to open my ipod touch/itunes "the itunes libary.itlfile is lockedon  a lockdisk or you do not have write permission on this file. How do I resolve this problem?

    I receive the follwing error message when trying to open my ipod touch/itunes "the itunes libary.itlfile is lockedon  a lockdisk or you do not have write permission on this file. How do I resolve this problem?

    Repair iTunes Security Permissions
    Right-click on your main iTunes folder and click Properties, then go to the Securitytab and click Advanced. Use the Change Permissions... button grant to your account (or the Users group) and SYSTEM full control of this folder, subfolders and files, then tick the option to Replace permissions entries... which will repair permissions throughout the library. When complete switch to the General tab, click in the Read-only check box to clear it, then click Apply.
    If you don't have the option to change the permissions then use the Owner tab and Edit... button to take ownership from an account with administrator privileges. Tick the option to Replace owner on subcontainers and objects.
    Repeat with the media folder if it isn't stored inside the main iTunes folder.
    If you've brought over the library from another computer you may also want to remove any "mystery" identities (S<string of dashes & digts>) that have come over from the old computer...
    The images above are from Windows 7. Hopefully the system isn't too different in Windows 8.
    tt2

  • I have downloaded the most recent itunes on my new computer with windows 8        but a message pops up saying "the itunes library.itl file is locked, on a locked disk or you do not have write permission for this file. How do I fix?

    I have downloaded the most recent itunes on my new computer with windows 8 but when I attempt to get in I get this message "The itunes library.itl file is locked, ona locked disk, or you do not have write permission for this file."  How do i fix this?

    Repair iTunes Security Permissions
    Right-click on your main iTunes folder and click Properties, then go to the Securitytab and click Advanced. Use the Change Permissions... button grant to your account (or the Users group) and SYSTEM full control of this folder, subfolders and files, then tick the option to Replace permissions entries... which will repair permissions throughout the library. When complete switch to the General tab, click in the Read-only check box to clear it, then click Apply.
    If you don't have the option to change the permissions then use the Owner tab and Edit... button to take ownership from an account with administrator privileges. Tick the option to Replace owner on subcontainers and objects.
    Repeat with the media folder if it isn't stored inside the main iTunes folder.
    If you've brought over the library from another computer you may also want to remove any "mystery" identities (S<string of dashes & digts>) that have come over from the old computer...
    The images above are from Windows 7. Hopefully the system isn't too different in Windows 8.
    tt2

  • Problems with I/O object to a File

    First of all, hi to everybody, sorry for my English.
    I have a problem with my Exam Project. I need to write and read object (Utente) from a file. Following the Class then a Description of the Error/problem
    questo � il loader
    import java.io.*;
    public class Load {
    public Load(){}
    public void Caricalista(ListKey Lista) throws Exception{
    Utente loaded,x;
    ObjectInputStream ois = new ObjectInputStream(new FileInputStream ("elenco.sav"));
    while((loaded = (Utente)ois.readObject())!=null){
    loaded = (Utente)ois.readObject();
    System.out.println(loaded.nome);
    Lista.insert(loaded);
    x=Lista.head();
    System.out.println(x.nome);}
    ois.close();
    Questo il Saver
    import java.io.*;
    public class Salva {
    public Salva(){}
    public void salva (Utente piero) throws IOException{
    Load loader=new Load();
    ListKey Lista=new ListKey();
    try{ loader.Caricalista(Lista);
    }catch (Exception e){System.out.println ("Errore in Salva.java");}
    FileOutputStream fos = new FileOutputStream ("elenco.sav");
    ObjectOutputStream oos = new ObjectOutputStream(fos);
    Lista.insert(piero);
    Utente test=new Utente();
    int i;
    for(i=0;i<Lista.lenght();i++){
    Lista.scorri(test);
    oos.writeObject(test);
    oos.close();
    public class ListKey extends ListNode {
    public ListKey() {super();}
    public ListKey (Utente o){super(o);}
    public ListKey(Utente o, List l){super (o,l);}
    public Utente find (String user){if (isEmpty())return null;
    if (user.equals(head().nome)) return head();
    return ((ListKey)tail()).find(user);
    public Utente scorri(Utente prova){if (isEmpty()) return null;
    else {prova=head();
    return ((ListKey)tail()).scorri(prova);
    e il main:
    public class mainvia {
    * @param args
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    Utente prova=new Utente();
    prova.nome="Tettone";
    prova.psw="300786";
    prova.LibriPrestito="SI";
    prova.TitlePrestito1="IL Giovane Holden";
    ListKey Lista=new ListKey();
    Salva save=new Salva();
    try {save.salva(prova);}catch(Exception e){}
    Load loader=new Load();
    try{loader.Caricalista(Lista);
    }catch(Exception e){}
    Utente x=new Utente();
    System.out.println(x.nome);
    The problem is that, if I use only the Load for open the file,it works great and find the first User, instead if in the Salva I run try{ loader.Caricalista(Lista);
    }catch (Exception e){System.out.println ("Errore in Salva.java");}
    it always goes in Error and print "Errore in Salva.java" like if it can not open the file.
    How Can I Resolve?
    The base idea is the:
    from the mainvia I pass the ListKey Lista to save, then i load all the object from the file to the Lista, then i add to the List the new Object then i write all the object in the List to the file.

    Let's start by printing some useful information about the error, instead of just the fact that an error occurred:}catch (Exception e){e.printStackTrace();}Tell us what that produces.

  • How to read and write data from json file from windows phone7 app

    Hi
    I am developing wp7 app for the use of students my questions are
    How can i write a code to read and write the json/text file for the wp7.
    I am using windows 7 OS, VS 2010 Edition.
    This is my code below:
    xaml:
    <Grid>
                        <TextBlock Height="45" HorizontalAlignment="Left" Margin="7,18,0,550" Name="textBlock1" Text="Full
    Name: " />
                        <TextBox Width="350" Height="70" HorizontalAlignment="Left" Margin="108,1,0,0" Name="txtName"
    Text="Enter your full name" VerticalAlignment="Top" />
                        <TextBlock Height="45" HorizontalAlignment="Left" Margin="6,75,0,0" Name="textBlock2" Text="Contact
    No: " VerticalAlignment="Top" />
                        <TextBox Width="350" Height="70" HorizontalAlignment="Left" Margin="108,61,0,480" Name="txtContact"
    Text="Enter your contact number" MaxLength="10" />
                        <Button Content="Register" Height="72" HorizontalAlignment="Left" Margin="10,330,0,0" Name="btnRegister"
    VerticalAlignment="Top" Width="190" Click="btnRegister_Click" />
                    </Grid>
    xaml.cs:
    private void btnRegister_Click(object sender, RoutedEventArgs e)
                string name, contact;
                name = txtName.Text;
                contact = txtContact.Text;
                try
                    if (name != "" && contact != "")
                        string msg = name + " " + contact;
                        MessageBox.Show(msg);
                        Student stud = new Student
                            Name= name,
                            Contact = contact,
                        string jsonString = JsonConvert.SerializeObject(stud);
                        MessageBox.Show(jsonString);
                    else
                        MessageBox.Show("Input Proper Information", MessageBoxButton.OK);
                catch (Exception ex)
                    MessageBox.Show(ex.Message);
    I have download NewtonSoft.json version 5.0.8.
    So, I am able to convert input data into json format, but how can I able to write and read this data from a json/text file.
    How can I do?
    Thank you in adv and please, reply soon.

    We don't have many samples left for Windows Phone 7 + Azure, the closest one to what you want to do is probably:
    Using Local Storage with OData on Windows Phone To Reduce Network Bandwidth
    this sample uses the local database feature: 'LINQ to SQL', available to Windows Phone 7.1 and 8.0 Silverlight applications, instead of simple file storage but even if you choose to stick with simple file storage I believe you should be able to adapt the
    networking related portions of the sample to your particular application.
    Eric Fleck, Windows Store and Windows Phone Developer Support. If you would like to provide feedback or suggestions for future improvements to the Windows Phone SDK please go to http://wpdev.uservoice.com/ where you can post your suggestions and/or cast
    your votes for existing suggestions.

  • How to create a file object for a file on Remote Server? UNIX

    Hi all,
    I am working on two servers A and B. BOTH ARE UNIX MACHINES. My java class exist on server A and executes on same server. The file that I need to process resides on server B. (Lets call it test.txt in MYTEST directory. So path will be /MYTEST/test.txt on server B) I need to do few things before I can process it:
    1) Check if file exist
    2) If it does FTP it to Server A. (I already know how to.)
    For both of these tasks, I need a File object for that file.
    My problem is that I am unable to set it up.
    \\B\MYTEST\test.txt will not work on UNIX. I already tried that. (It only works on Windows)
    I tried:
    /B/MYTEST/test.txt ---- Does not work
    B:/MYTEST/test.txt ---- Does not work
    :B/MYTEST/test.txt ---- Does not work
    B:MYTEST/test.txt ---- Does not work
    All of these instances say the same thing: "File does not exist."
    Any ideas? Please help!!!
    -Chirag

    I by no means want to sound belittling... so don't take me that way..
    You need to understand the basics of files, and networks. You can't check if a file exists on another machine if you don't have a network protocol to communicate with. The reason \\ works under windows is because you are using an invisible (to you) network protocol. You probably know it as windows sharing. If your file were not shared under it's own name, that method wouldn't work (I'm assuming your entire drive is shared without a password... a horrible security flaw...but one thing at a time)
    You can use FTP protocol to check if a file exists. You can either send the raw text FTP commands through a socket connection in java, or you can use a freely available FTP java API to make it a bit more simple. You could also write a small java server on the other machine, and have it tell you what you need to know with a socket connection. In this way, you have created your very own network protocol.

Maybe you are looking for

  • Help open port on ASA5510 (version 8.3)

    Hi all, I configured ASA to open port 21, 3389, 5900 (outside access in) but when i check port just success : 21 and 3389, Error: 5900 If i configured with only one port 5900 or 3389, is't ok, i don't undesrtand what 's the problem? ASA5510>        A

  • Servlets & JDBC

    Hi Could someone tell me how to delete or ammend a specific field in a database through a servlet. I have written a servlet that writes to a database but I need it to ammend or delete a already existing field. Any help would be appreciated. By the wa

  • Connect Gallery buttons rather than thumbnails?

    This seems like it should be easy, but I cannot figure out how to do this in AS3. And after pouring through several books and lots of sample projects, no one quite seems to be using this method to create galleries. The goal: A gallery with circles fo

  • Query to get the record with latest date

    I have ACCOUNT_TABLE account_number account_event event_date ACCOUNT_TABLE 1,Open,12 Jan 2006 1,Open,13 Jan 2006 1,Open,14 Jan 2006 1,Open,15 Jan 2006 1,Open,16 Jan 2006 How can I get the latest record(16 Jan 2006) in one sql statement. Thx m

  • To remove the stock from WIP area when confirmation was cancelled.

    Hi Gurus, How can we remove the stock that was commited , from the WIP area when we cancel the confirmation. Plz help me.. Thank you.