Avatar billede netspinner Nybegynder
28. maj 2006 - 22:22 Der er 8 kommentarer

Backup af fil, der skrives

Hej exp'ere,
Jeg har en klasse kaldet BinIO, som sørger for al I/O til mit program.

Jeg ønsker at tage backup af den fil der gemmes - bare i et bibliotek jeg kalder "backup", men har ingen videre erfaring med hvordan det kan gøres. Dvs. den skal vel egentlig gemmes to gange - eller der skal oprettes en kopi af den fil der skrives til, bare i et andet bibliotek?

Min klasse er som følger:


import java.util.*;    // Required for the Hashtable class
import java.io.*;      // Required for handling the IOExceptions


public class BinIO
{
    // Method for writing the file
    public static void writeList(EventTable eventcollection)
    {
        EventComponents tempEvent;
       
        try{
            // Create a new FileOutputStream object
            FileOutputStream eventFile = new FileOutputStream("Arrangementer.bin");
            // Create a new DataOutputStream object
            DataOutputStream eventWriter = new DataOutputStream(eventFile);
           
            // Write each element of the hashTable to the file using enumeration
            Enumeration en = eventcollection.getEvents();
       
            while(en.hasMoreElements()){
               
                EventComponents nextEvent = (EventComponents) en.nextElement();
               
                eventWriter.writeUTF(nextEvent.getEventName());
                eventWriter.writeUTF(nextEvent.getArtist());
                eventWriter.writeUTF(nextEvent.getTitle());
                eventWriter.writeUTF(nextEvent.getGenre());
                eventWriter.writeUTF(nextEvent.getMonth());
                eventWriter.writeUTF(nextEvent.getDate());
                eventWriter.writeUTF(nextEvent.getTime());
                eventWriter.writeUTF(nextEvent.getLocation());
                eventWriter.writeUTF(nextEvent.getPrice());
            }           

            /* Close the file so that it is no longer accessible to
              the program */
            eventWriter.close();
        }
       
        catch(IOException e)
        {
            System.out.println("Der opstod et problem med at skrive til filen");
        }
    }

    // Method for reading the file
    public static void readList(EventTable eventcollection)
    {
        String tempEventName;
        String tempArtist;
        String tempTitle;
        String tempGenre;
        String tempMonth;
        String tempDate;
        String tempTime;
        String tempLocation;
        String tempPrice;
       
        boolean endOfFile = false;
       
        try{
         
            FileInputStream eventFile = new FileInputStream("Arrangementer.bin");
           
            DataInputStream eventStream = new DataInputStream(eventFile);

            while(!endOfFile)
            {
                try { 
                    tempEventName = eventStream.readUTF();
                    tempArtist = eventStream.readUTF();
                    tempTitle = eventStream.readUTF();
                    tempGenre = eventStream.readUTF();
                    tempMonth = eventStream.readUTF();
                    tempDate = eventStream.readUTF();
                    tempTime = eventStream.readUTF();
                    tempLocation = eventStream.readUTF();
                    tempPrice = eventStream.readUTF();
                   
                    try {
                      eventcollection.addEvent(new EventComponents(tempEventName, tempArtist, tempTitle, tempGenre, tempMonth, tempDate, tempTime, tempLocation, tempPrice));
                    }
                    catch (InvalidENException ex){
                      System.out.println(ex.getMessage());
                    }
                }
                catch (EOFException eof){
                    endOfFile = true;
                } 
            }
           
            /* Close the file so that it is no longer accessible to
              the program */
            eventStream.close();
        }
       
        catch(FileNotFoundException e)
        {
            System.out.println("\nIngen fil blev indlæst - eksisterer ikke(?)");
        }
       
        catch(IOException e)
        {
            System.out.println("\nDer opstod et problem med at læse filen");
        }
    }
}//end class
Avatar billede arne_v Ekspert
28. maj 2006 - 23:25 #1
var det ikke nemmest bare at lave en file copy før du åbner eller efter du lukker
file (java har ikke file copy men det er jo kub 6 linier med en while løkke)
Avatar billede netspinner Nybegynder
28. maj 2006 - 23:27 #2
Hmm jo, det lyder sandsynligt at filen kopieres. Har du en metode, der klarer dette?
Avatar billede arne_v Ekspert
28. maj 2006 - 23:31 #3
public static void copy(String fromname, String toname) throws IOException {
        InputStream is = new FileInputStream(fromname);
        OutputStream os = new FileOutputStream(toname);
        byte[] b = new byte[100000];
        int n;
        while((n = is.read(b)) >= 0) {
            os.write(b, 0, n);       
        }
        is.close();
        os.close();
    }
Avatar billede arne_v Ekspert
28. maj 2006 - 23:32 #4
OK - det blev så til 11 linier men stadivæk ikke meget
Avatar billede netspinner Nybegynder
29. maj 2006 - 00:01 #5
Hmmm jeg kalder med copy(); efter min eventWriter.close(); .. det virker ikke, så hvad mangler jeg at gøre?
Avatar billede arne_v Ekspert
29. maj 2006 - 00:03 #6
eventFile.close();

måske
Avatar billede arne_v Ekspert
09. juli 2006 - 04:14 #7
netspinner ??
Avatar billede netspinner Nybegynder
30. juli 2006 - 12:52 #8
Sorry, havde lige glemt indlægget.
Jeg fandt aldrig ud af det, så droppede det inden mit projekt skulle afleveres. Desværre.
Jeg genoptager projektet om en uges tid for at arbejde videre på det for sjov. Fik i øvrigt et 13-tal :-P
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester