2016-07-21 1 views
0

Je veux stocker des données dans un fichier binaire et il devrait générer les dossiers s'il n'existe pas, ce n'est pas le cas mais il semble que j'appelle cela Si le fichier n'existe pas, il devrait le générer.Utiliser un chemin relatif pour enregistrer mon fichier binaire ne trouve pas le chemin

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"); 
} 

Cependant, il génère l'erreur suivante

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) 

Je ne produis pas les fichiers soit, ce qui est un peu déroutant.

+0

Les chemins relatifs à '.' - le« répertoire de travail actuel »- ne sont pas recommandés car ils dépendent du point de départ (IDE, chauve-souris, double-clic). Utilisez 'System.getProperty (" user.home ") +"/... "' ou autre. –

+0

@JoopEggen Je pense que je vais utiliser juste cela, mais si je l'exporte en tant que jarre exécutable ne va pas simplement générer les dossiers où je mets le pot? Il semble plus facile à utiliser de cette façon. –

+0

Oui, quand ils double-cliquez simplement sur le pot. Peut-être que je suis opiniâtre. Ma pratique consiste à inviter les utilisateurs et ainsi de suite. –

Répondre

1

Vous devez créer les dossiers:

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

Merci beaucoup! J'ai oublié que le createNewFile ne génère pas le chemin aussi. –

0

Je vais jeter un oeil où j'ai le « } » dans le code. Il semble que le println soit dans le bloc Try ... Catch. Cette réponse pourquoi vous voyez le texte et l'erreur. La deuxième question sur l'ordre des messages, bien, le System.out et le System.err écrivent à un moment différent, car ils sont comme des fils différents. Les deux premières lignes sont donc System.out. En attendant, la trace de la pile provient du e.printStackTrace.

Cette question répond également comment créer le chemin.