2009-09-21 18 views
-1

私は次のパターンを使用してファイルに作成して書いています:ファイルに何も書き込まれないのはなぜですか?

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

しかしファイルは、彼らが空で作成されたものの後に最初のファイルのみが、に書かれているいくつかの理由 - 彼らはのみ作成されます特定の時間にレコードがあった場合、ファイル名はレコードから取られた時間に基づいているためです。私の完全な方法は以下の通りです。 (私が行った変更を反映するために編集しました)。

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

を呼び出す前に、私は別てFileWriterインスタンスを作成するが、それらをインスタンス化するために、同じファイルのインスタンスを使用して行うには、その何かを疑います。ファイルが上書きされているので、チェックされると空のように見えます。なぜなら、人口統計ファイルはempyファイルでしか書かれていないからです。 – Ankur

答えて

0

はたぶんvisdata.csvが存在しないか、データが含まれていないいないので何も書かないであろう。

C:/dev/ws/DataOrdering/data/visdata.csvが存在しますか?

+0

それは良い提案ですが、私はそれを確認しました、その問題ではありません。 – Ankur

2

ファイルが存在しますか?あなたは....書いていない、

1

を追加しているあなたは2回同じことをなぜあなたの「!

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

を確認してください?ファイルが存在しない場合。あなたは追加しないで書く必要があります。

フォルダが存在しない可能性もあります。

aFile.getParentFile().mkdirs(); 

親フォルダが既に存在する場合は問題ありません。

+0

@ Martyin、感謝しました。 – Ankur

0

コール

writer.flush(); 

writer.close(); 
+0

@Pierre、close()がflush()を呼び出すという印象を受けました。 (そして、Java 5のソースを読んでこれを確認しているようだ) – Glen

+0

@ Glen、そうだと思っていたので、議論のために試してみた。同じ問題が残っています。 – Ankur

+0

ああ、はい、申し訳ありません。私はOutputStreamと混同していました – Pierre

関連する問題