2011-01-10 8 views
6

Yazdıkları anda günlük dosyalarını okumalıyım. Sorun şu ki, bu günlük dosyaları bir zaman içinde yeniden adlandırılacak ve bu yeniden adlandırma işleminin mümkün olduğunu/java okuma sürecinin kilitlemediğini garanti etmeliyim. Kilitleme yapmadan (oturum aç) dosyayı diğer işlemler için yeniden adlandırma/taşıma

bu

+2

okuyabilir nasıl, bu konunun gerçekten OS bağlıdır. Örneğin Linux, dosyayı varsayılan olarak kilitlemez. Okumaya açıkken hareket etmek, hatta silmek için özgürsünüz. Windows için herhangi bir çözüm bilmiyorum, bu yüzden, bu (iyi) soruya gerçekten cevap veremiyorum. –

+0

Ama kullanım durumu: "büyürken ve bazen yeniden adlandırılırken günlük dosyalarını okuma" yaygın olmalı, değil mi? Kilidin zamanını en aza indirgeyim ne yapabilirim? Sadece son satırı okudum mu? – dermoritz

+0

Rastgele erişim okumayı kullanarak uygulamak mümkün olsa da, "Küçültme" gerçekten iyi bir fikir değildir. Ancak bu şekilde sadece çoğaltılması zor bir hata yaparsınız. Okuma işlemi, yeniden adlandırma mantığını biliyorsa, yeniden adlandırılmak üzere dosya açılmasını engelleyebilir. Fakat söz konusu mantığa bağlı olarak çalışabilecek ya da çalışmayabilen bir tür yarı-çözümdür. Yapabileceğiniz en iyi şey, yeniden adlandırma başarısız olursa, yeniden adlandırma başarısız olursa yeniden adlandırma işlemini yeniden yapmaktır, bu yüzden önemli bir hata olmaz. Ama sadece üzerinde kontrolünüz varsa çalışır. –

cevap

0

Sen RAM kopyalamak ve Java çapraz platform iken kopyadan

+0

bu, "kilidin zamanını en aza indirgemek" yaklaşımını uygular - değil mi? Sergey'in bir an için görmezden gelmesi (“Ama bu şekilde sadece çoğaltılması zor bir hata yaparsınız.”) Bunu nasıl uygularız? Ters okuma ile "randomaccessfile" denedim. ama okuduğum kadarıyla dosyayı yeniden adlandıramam. Bir dosyayı veya hafızanın bir kısmını kopyalayıp hafızayı okumak için en hızlı yol nedir? – dermoritz