2017-03-02 2 views
0

Java에서 약속 도서 프로그램을 만들려고하는데 BufferedWriter가 파일에 쓰지 않는 것 같습니다.BufferedWriter를 텍스트 파일에 쓰려면 어떻게해야합니까?

이 코드 블록 try { } catch (FileNotFoundException) { } catch (IOException) { }

FileWriter writer = new FileWriter("Appointments" + name + ".txt", true); 
BufferedWriter bufferedWriter = new BufferedWriter(writer); 

if (open == 'o') { 
    FileReader reader = new FileReader("Appointments" + name + ".txt"); 
    BufferedReader bufferedReader = new BufferedReader(reader); 
    while ((line = bufferedReader.readLine()) != null) { 
     if (line.indexOf("one-time") == line.length() - 8) { 
      OneTime o = fromStringOneTime(line); 
      oneTimes.add(o); 
     } 
     if (line.indexOf("daily") == line.length() - 5) { 
      Daily d = fromStringDaily(line); 
      dailys.add(d); 
     } 
     if (line.indexOf("monthly") == line.length() - 7) { 
      Monthly m = fromStringMonthly(line); 
      monthlys.add(m); 
     } 
    } 
} 

while 루프가 단지 현재 3 가지 ArrayLists로 파일의 모든 값을 초기화하고 모든 내부이다. 당신이 선택하면 다음

나는 당신이 (변수 descdate 이전에 정의 된) 약속을 추가 할 수있는 새 개체를 만들 수있는 코드 블록을 가지고 :

System.out.print("Enter if this is a (o)ne-time, (d)aily, or (m)onthly appointment: "); 
freq = scanner.next().charAt(0); 
if (freq == 'o') { 
    OneTime o = new OneTime(desc, date.getDate()); 
    oneTimes.add(o); 
    totalCount++; 
    bufferedWriter.write(o.toString()); 
    bufferedWriter.newLine(); 
    valid = true; 
} else if (freq == 'd') { 
    Daily o = new Daily(desc, date.getDate()); 
    dailys.add(o); 
    totalCount++; 
    bufferedWriter.write(o.toString()); 
    bufferedWriter.newLine(); 
    valid = true; 
} else if (freq == 'm') { 
    Monthly o = new Monthly(desc, date.getDate()); 
    monthlys.add(o); 
    totalCount++; 
    bufferedWriter.write(o.toString()); 
    bufferedWriter.newLine(); 
    valid = true; 
} 

의 끝에서 시도 블럭, 나는 라인 reader.close()writer.close() 있습니다. 그렇다면 저장해야하는 파일을 검사 할 때 여전히 공백으로 표시되는 이유는 무엇입니까? 이것은 파일 저장을 다루는 첫 번째 시간이기 때문에 왜 그렇게 작동하지 않는 것인지 확신 할 수 없습니다. .

편집 : 옵션 대신 새로운 하나

+0

동시에 파일을 읽고 쓸 수는 없습니다. 대부분의 운영 체제. – EJP

+0

그렇다면 사용을 마친 직후 독자를 닫으면 작동할까요? 왜냐하면 나는 초기화를 위해서만 사용할 필요가 있기 때문에 코드의 첫 번째 블록에서 나는 내 게시물에 넣는다. – RoboticPlayer

+0

다른 파일 이름으로 파일에 쓰고 프로그램 끝에서 이름을 바꿀 수 있습니까? – GrabNewTech

답변

0

예, 운영 체제의 대부분 읽고 같은 파일을 작성할 수 없습니다 만드는 기존 파일을 열도록 선택 경우 파일은 이제 읽습니다. 따라서 임시 파일 이름을 사용하여 파일에 글을 쓰고 프로그램 끝에있는 파일 이름으로 바꿔서 문제를 해결할 수 있습니다.

try { 
    FileWriter writer = new FileWriter("Appointments" + name + "1.txt", true); 
    FileReader reader = new FileReader("Appointments" + name + ".txt"); 
    BufferedReader bufferedReader= new BufferedReader(reader); 
    BufferedWriter bufferedWriter = new BufferedWriter(writer); 
    ....... 
} catch() { 
    ...... 
} finally { 
    bufferedReader.close(); 
    bufferedWriter.flush(); 
    bufferedWriter.close(); 
} 

// Rename the file and delete temp file 
File srcFile = new File("Appointments" + name + "1.txt"); 
File targerFile = new File("Appointments" + name + ".txt"); 
srcFile.renameTo(targetFile); 
srcFile.delete(); 
+0

시도해 보았습니다. 파일은 여전히 ​​비어 있습니다. '1'이 추가 된 두 번째 파일이 생성되었지만 저장된 파일은 본 적이 없습니다. – RoboticPlayer

+0

bufferedWriter에 flush() 또는 close()를 호출 했습니까? – GrabNewTech

+0

예, 둘 다 부르겠습니다. – RoboticPlayer

관련 문제