2009-09-21 2 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

은 "!"

  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

@ Martins, 감사합니다. 나는 그것을 더 합리적인 것으로 바 꾸었습니다. – Ankur

0

전화

writer.flush(); 

writer.close(); 
+0

@ 피에르, 나는 close()가 flush()를 호출한다는 인상하에있었습니다. (그리고 자바 5 소스를 통해 읽는 것은 이것을 확인하는 것 같다.) – Glen

+0

@ 글렌, 그렇다. 나는 그렇게 생각했다. 나는 논증을 위해 그것을 시도했다. 같은 문제가 남아 있습니다. – Ankur

+0

오, 예, 죄송합니다. 나는 OutputStream과 혼동되었다. – Pierre