2016-07-21 12 views
0

Ich möchte Daten in einer Binärdatei speichern und es sollte die Ordner generieren, wenn es nicht existiert, das ist nicht der Fall, aber es scheint, ich rufe das an Wenn die Datei nicht existiert, sollte sie erzeugt werden.Verwendung eines relativen Pfades zum Speichern meiner Binärdatei kann den Pfad nicht finden

public Account(int accountid, String name, String lastname, double balance, AccountState state) { 
    this.name = name; 
    this.lastname = lastname; 
    this.accountID = accountid; 
    this.balance = balance; 
    this.state = state; 


    try { 
     accountfile = new File("./Clients/" + lastname + "/" + name + "/" + "BalanceInfo " + accountid + ".ACC"); 
    if(!accountfile.exists()) { 
     accountfile.createNewFile(); 

    } 

    fos = new FileOutputStream(accountfile); 
    oos = new ObjectOutputStream(fos); 

    oos.writeObject("balance: " + balance); 
    oos.writeObject("state: " + state.toString().toLowerCase()); 

    } catch(IOException e) { 
     System.out.println(e.getMessage()); 
     e.printStackTrace(); 
    } 

    System.out.println("Account sucessfully Created"); 
} 

Es ist jedoch den folgenden Fehler

The system cannot find the path specified 
Account sucessfully Created 
java.io.IOException: The system cannot find the path specified 
at java.io.WinNTFileSystem.createFileExclusively(Native Method) 
at java.io.File.createNewFile(Unknown Source) 
at dinges.Account.<init>(Account.java:44) 
at dinges.Main.main(Main.java:10) 

ich erzeugen die Dateien nicht entweder, was etwas verwirrend ist.

+0

Relative Pfade zu '.' - dem" aktuellen Arbeitsverzeichnis "- ist nicht zu empfehlen, da es vom Startpunkt abhängt (IDE, Fledermaus, Doppelklick). Verwenden Sie 'System.getProperty (" user.home ") +"/... "' oder so. –

+0

@JoopEggen Ich denke, dass ich nur das verwenden werde, aber wenn ich es als lauffähiges Glas exportiere, wird es nicht nur die Ordner erzeugen, in die ich das Glas gelegt habe? Es scheint einfacher zu sein, so zu arbeiten. –

+0

Ja, wenn sie einfach das Glas doppelklicken. Vielleicht bin ich eigensinnig. Meine Praxis besteht darin, Benutzer und so weiter zu bitten. –

Antwort

1

sollten Sie die Ordner erstellen:

try { 
     accountfile = new File("./Clients/" + lastname + "/" + name + "/" + "BalanceInfo " + accountid + ".ACC"); 
    if(!accountfile.exists()) { 
     accountfile.getParentFile().mkdirs(); 
     accountfile.createNewFile(); 
    } 
+0

Vielen Dank! Ich habe vergessen, dass createNewFile den Pfad auch nicht erzeugt. –

0

Ich werde einen Blick darauf werfen, wo ich die „}“ im Code haben. Scheint, dass die println in den Try ... Catch-Block ist. Diese Antwort, warum Sie den Text und den Fehler sehen. Die zweite Frage über die Reihenfolge der Nachrichten, naja, die System.out und die System.err schreiben zu unterschiedlichen Zeitpunkten, da sie wie verschiedene Threads sind. Die ersten 2 Zeilen sind also System.out. Die Stack-Trace stammt von der e.printStackTrace.

Diese question beantworten auch, wie der Pfad erstellt wird.