2009-09-21 5 views
-1

Je crée et écrit à un fichier en utilisant le schéma suivant:Pourquoi rien n'est écrit dans un fichier?

File afile = new File("C:/dev/ws/DataOrdering/data/" + thisDate 
       + "_" + thisTime + "_visdata.csv"); 
FileWriter writer = new FileWriter(afile); 
writer.append(tradeDetails); 
writer.close(); 

Cependant, pour une raison que le premier fichier est écrit, après que les fichiers sont créés par elles sont vides - ils ne seraient créés s'il y avait un enregistrement au moment donné, car les noms de fichiers sont basés sur les temps pris dans les enregistrements. Ma méthode complète est imprimée ci-dessous. (Je l'ai édité pour refléter les changements que j'ai faits).

public void createTimeFiles() throws IOException { 

    CSVReader reader = new CSVReader(new FileReader(
      "C:/dev/ws/DataOrdering/data/visdata.csv")); 

    String[] nextLine; 
    String lastTime = ""; 
    String code, date, hour, min, sec, offset, type, price, volume, bid, ask, headline; 

    HashMap<Integer, FileWriter> writers = new HashMap<Integer, FileWriter>(); 
    while ((nextLine = reader.readNext()) != null) { 
     String thisDate = nextLine[1]; 
     String thisTime = nextLine[2].substring(0, 5); 

     code = nextLine[0]; 
     date = nextLine[1]; 
     hour = nextLine[2].substring(0, 2); 
     min = nextLine[2].substring(3, 5); 
     sec = nextLine[2].substring(6); 
     offset = nextLine[3]; 
     type = nextLine[4]; 
     price = nextLine[5]; 
     volume = nextLine[6]; 
     bid = nextLine[7]; 
     ask = nextLine[7]; 
     headline = nextLine[7]; 

     // System.out.println(thisDate + " - " + thisTime + " - " + hour 
     // + " - " + min); 
     String tradeDetails = code + " _ " + date + " _ " + hour + " _ " 
       + min + " _ " + sec + " _ " + offset + " _ " + type + " _ " 
       + price + " _ " + volume + " _ " + bid + " _ " + ask 
       + " _ " + headline; 

     File afile = new File("C:/dev/ws/DataOrdering/data/" + thisDate 
       + "_" + thisTime + "_visdata.csv"); 
     if (afile.exists()) { 
      FileWriter writer = new FileWriter(afile); 
      writer.append(tradeDetails); 
      writer.close(); 
     } else { 
      System.out.println("the file exists"); 
      FileWriter writer = new FileWriter(afile); 
      writer.write(tradeDetails); 
      writer.close(); 
     } 

    } 
} 
+0

Je soupçonne sa quelque chose à voir avec la création de différentes instances de FileWriter mais en utilisant la même instance de fichier pour les instancier. Est-ce que les fichiers sont écrasés et semblent donc vides quand ils sont cochés, parce qu'un fichier rempli a été simplement écrit avec un fichier vide. – Ankur

Répondre

0

Peut-être que visdata.csv n'existe pas ou ne contient aucune donnée, donc rien ne serait écrit.

Existe-t-il?

+0

C'est une bonne suggestion, mais j'ai vérifié, ce n'est pas le problème. – Ankur

2

Le fichier existe-t-il? Vous êtes annexant, ne pas écrire ....

1

Vérifiez votre "!"

  if (!afile.exists()) { // here 
        System.out.println("the file exists"); 
        FileWriter writer = new FileWriter(afile); 
        writer.append(tradeDetails); 
        writer.close(); 
      } else { 
        FileWriter writer = new FileWriter(afile); 
        writer.append(tradeDetails); 
        writer.close(); 
      } 

Pourquoi faites-vous deux fois le même ?? Si le fichier n'existe pas. Vous devez écrire, pas ajouter.

Il est également possible que le dossier n'existe pas.

aFile.getParentFile().mkdirs(); 

Si le dossier parent existe déjà, il n'y a aucun problème.

+0

@Martijin, merci, je l'ai changé pour être plus sensible. – Ankur

0

Appel

writer.flush(); 

avant d'appeler

writer.close(); 
+0

@Pierre, j'étais sous l'impression que close() appelle flush(). (et lire à travers la source Java 5 semble le confirmer) – Glen

+0

@ Glen, oui je le pensais aussi, je l'ai essayé par souci d'arguments. Le même problème reste. – Ankur

+0

Oh, oui, désolé. J'étais confus avec OutputStream – Pierre

Questions connexes