File.ser auf leere checken

.maik.

Bekanntes Mitglied
Abend.
thread ist denke ich aussagekräftig genug. aber ich schreibe trotzdem noch kurz was: ich moechte ein object aus einer .ser datei lesen, muss vorher aber überprüfen ob etwas drin steht, da Exception. wäre nett, wenn mir jemand auf die sprünge helfen koennte. habe schon einiges ausprobiert aber leider ohne Erfolg.

danke
 
Wie ließt du denn die Datei aus?
Bei den meisten Sachen hast du ne Methode available(), die gibt dir an wieviele bytes du noch lesen kannst.
 
Wie ließt du denn die Datei aus?
Bei den meisten Sachen hast du ne Methode available(), die gibt dir an wieviele bytes du noch lesen kannst.

Was aber nicht immer stimmt, da bei einigen Streams angegeben wird, wieviel insgesamt gelesen werden kann und bei einigen, wieviel gelesen werden kann, bis blockiert wird. Deshalb schlage ich vor, wenn du ein File-Objekt hast, die Methode length brauchst.
File (Java 2 Platform SE v1.4.2)
 
Java:
  public void actionPerformed(ActionEvent e)
  {
    File fileData = new File("saves/data.ser");
    try
    {
      InputStream is = new FileInputStream(fileData);
      ObjectInputStream ois = new ObjectInputStream(is);
      Vector data = new Vector();
      Vector da = new Vector();
      if(fileData.length() >= 1)
        data = (Vector)ois.readObject();
      ois.close();
      fileData.delete();
      fileData.createNewFile();
      da.add(name.getText());
      da.add(number.getText());
      data.add(da);
      OutputStream os = new FileOutputStream(fileData);
      ObjectOutputStream oos = new ObjectOutputStream(os);
      oos.writeObject(data);
      oos.close();
    }
    catch(IOException t){System.err.println(t);}
    catch(ClassNotFoundException c){System.err.println(c);}
  }

Es wird beim eintragen und dem überprüfen mit length() immer noch eine Exception ausgespuckt.
 
Was für eine Exception? Und warum benutzt du die Exception nicht gleich zum erkennen von leeren Dateien? Exceptions haben schon ihren Sinn, es bringt nichts sie mit aller Gewalt zu verhindern.
 
Ja, in dem Fall solltest du den Stream aber umbedingt in einen Finally-Tag schließen. Sollte man sowieso, da Exceptions jederzeit auftreten können.

Denke daran, dass du die EOFExc. OBER der IOExc. abfangen musst.
 
ah jetzt klappts 🙂 hab nur noch eine verständnisfrage und zwar: sinf finally blöcke nicht unnötig? man koennte den code doch auch so hinter catch schreiben . würde doch dann auch sowieso ausgeführt werden?
 
Nein. Denn manchmal wird eine Exception zum Aufrufer gethrowt, und dann wird nur noch der finally abgearbeitet.

Java:
public class Test
{
	public static void main(String[] args)
	{
		test();
	}
	public static void test()
	{
		try
		{
			System.out.println("1");	
			
			int a = 2;
			int b = 2;
			
			if(a + b == 4)			
				throw new RuntimeException();
			
			System.out.println("2");
		}
		finally
		{
			System.out.println("3");	
		}
		System.out.println("4");
	}
}
 
ne leere datei macht doch fast keinen sinn. wenn du sie serialisierst wird doch direkt was reingeschrieben. ausser das schreiben schlägt fehl. dann ist das lesen bei der nächsten ausführung ebenfalls eine ausnahme und kann mit try-catch abgehandelt werden (catchen der EOFException). Für alle anderen Fälle tut es File#exists. existiert die datei, intialisiert du deine objekte mit denen von der datei und wenn nicht, erzeugst du sie neu..
 
Code:
finally
wird einfach immer abgearbeitet, ganz egal was im
Code:
try-catch
passiert. auch bei einem return zum beispiel. das einzige, was mir grad spontan einfällt, was ein finally unterbinden würde, wäre System.exit(...)
 
[c]return[/c] führt auch dazu, dass [c]finally[/c] noch ausgeführt wird? Wieder was gelernt 🙂
Du kannst mit einem return in einem finally-Block sogar das return aus dem try-Block überschreiben, wenn du lustig bist.
Solange die VM nicht ungeplant terminiert (Stromausfall, kill, etc) werden finally-Blöcke immer ausgeführt.
 

Neue Themen


Zurück
Oben