2009-06-16 40 views
5

Bir girdi dosyasının her satırını incelemek, bazı satırlarda değişiklik yapmak ve sonucu vermek için BufferedReader ve PrintWriter kullanıyorum. Bir satırda değişiklik olmazsa, çıktı dosyasına olduğu gibi yazdırılır. Ancak bir sebepten ötürü, süreç erken sona ermektedir. Ancak, bazı tuhaf nedenle bu süreç zamanından önce sona ererBufferedReader/PrintWriter ile ilgili sorunlar?

BufferedReader in = new BufferedReader(new FileReader("in.txt")); 
FileOutputStream out = new FileOutputStream("out.txt"); 
PrintWriter p = new PrintWriter(out); 
String line = in.readLine(); 

while(line!=null) 
{ 
    if(line is special) 
     do edits and p.println(edited_line); 
    else 
     p.println(line); 

    line = in.readLine(); 
} 

(aslında bir çizginin yarım yazdırır) benim giriş dosyasının sonuna doğru: Kod şöyle görünür. Bunun açık bir nedeni var mı? While döngüsü açıkça bir boş değer tarafından sonlandırılıyor. Ve 250k + satır txt dosyamın sonuna doğru. Teşekkürler!

+0

kesinlikle emin hiçbir istisnası atılır ediliyor Are o dosya çıkış akışı kapatmak için? Bir istisna * atıldıysa ne yapardınız? Kayıt olur mu? –

+0

Jon - PrintWriter'in istisnalar yaptığını unutmayın - birinin meydana gelip gelmediğini görmek için "checkError" yöntemini kullanmanız gerekir. – MetroidFan2002

+0

Evet, ancak BufferedReader ve FileReader yok - bu yüzden readLine() çağrısı atılmış olabilir. –

cevap

7

PrintWriter veya FileOutputStream öğelerinizi nerede temizliyor/kapatacaksınız? Program çıkarsa ve bu yapılmazsa, tüm sonuçlarınız yazılmaz.

Sen out.close() (muhtemelen bir p.flush() yanı?) Ihtiyacınız işleminin sonunda

+1

Kapatma, sadece yıkamadan daha iyidir. +1 –

+1

Bir istisna olması durumunda bunu son olarak blokta yapmayı unutmayın. –

+0

Bu p.close() olmalıdır. p.flush() * gerekli * olmamalı, ancak PrintWriter'in temel akışı kapatmadan önce temizlenmediğini bilmek güzel. Bu akışta bir hata varsa (->, ya da her ikisini de temizlemezse), aynı sorunu tekrar yaşayacaksınız. –

1

Döngüden sonra p.flush() eklemeyi deneyin.

1

PrintWriter'de otomatik temizleme özelliği etkin değildir, bu nedenle program sonlanmadan önce dosyanın son biti temizlenmez. p.flush() Ekleme süreniz sona erdikten sonra hile yapmalısınız.