2012-07-19 8 views
5

Bu java bir çeşit önbellek URL'ye tutuyor gibi görünüyor (& dosyaları). , ör. Sınıf yolumdaki bir jar dosyasında "resourcs.txt" dosyası var. Bu dosyanın içeriği: "Sürüm 1"java.net.URL önbelleği

new java.io.BufferedReader (new java.io.InputStreamReader(new URL("jar", "", "file:test.jar!/resourcs.txt").openConnection().getInputStream())).readLine() 

döner (beklendiği gibi) "Sürüm 1"

ben "Sürüm 2" olmak için dosya içeriğini değiştirmek ve bu koda tekrar arayın . Ve hala "Sürüm 1"

Bu "önbelleği" nasıl temizleyebilirim.

Dikkat: Sadece Linux'ta olduğunu öğrendim.

+1

buna bir olmasından daha fazla ilgilidir bahse .jar dosyası URL – SJuan76

+0

kullanmamakta emin değilim, sadece Linux'ta mevcut –

+1

İlginç. İlk akışlar düzgün kapatıldı mı? – esej

cevap

6

, bağlantı uygulanan bir önbellekten fayda alır sun.net.www.protocol.jar.JarURLConnection bir örneği olan, kullanan bir URL bağlantısı için önbelleğe alma kapatabilirsiniz sun.net.www.protocol.jar.JarFileFactory

Kaynak kodu,numaralı uygulamada setUseCache(false) numaralı uygulamayı onaylar, bu önbellek kullanımını engeller. Linux/Windows davranış farkı

Varsayımım: Bu dosya bir çok uzun süre açılmış kolları tutmak için takdir etmez çünkü URLJarFileCloseController arayüzünden yakın olay bildirimi,

1

Bunun bir çeşit sınıf yükleme sorunu olduğunu düşünüyorum, çünkü bu jar-protocoll.

Kavanozu bunun yerine bir zip dosyası olarak açmaya çalışın.

ZipFile zf = new ZipFile(file); 
try { 
    InputStream in = zf.getInputStream("resourcs.txt"); 
    // ... read from 'in' as normal 
} finally { 
    zf.close(); 
} 
3

Sen

Çünkü URL'nizdeki kullanılan jar protokolün
URLConnection con = new URLConnection(new URL("jar", "", "file:test.jar!/resourcs.txt")); 
    con.setUseCaches(false); 
    new BufferedReader (new InputStreamReader(con.getInputStream())).readLine(); 
3

Aslında ... Windows daha hızlı tetiklenir basit cevap, sbridges tarafından verilen cevaba çok yakındır, ancak , "yeni URLConnection (...)" kullanarak URLConnection'ı başlatamazsınız, çünkü soyut bir sınıftır.

Sadece bu şekilde yapabilirsiniz: Bazı üçüncü taraf kod kullanıyorsanız

URL url = new URL(urlSrt); 
    URLConnection con = url.openConnection(); 
    con.setUseCaches(false); 
+0

Harika, teşekkürler. Bence java'da kaynak önbellekleme, herkesin bilmediği tehlikeli bir özelliktir. Web kamerası resimlerini bir URL'den yenilemeye çalıştım ancak her zaman aynı görüntüyü elde ettim. – Stephan

0

bu çalışması gerekir:

url.openConnection().setDefaultUseCaches(false);