SORU
22 ŞUBAT 2010, PAZARTESİ


() getResourceAsStream vs FileİnputStream

Bir Web uygulaması içinde bir dosya yüklemek için çalışıyordum, ve FileInputStream kullandım FileNotFound bir istisna oluyordum. Ancak, aynı yolu kullanarak, getResourceAsStream() yaptığım zaman dosya yüklemek için başardı. İki yöntem arasındaki fark, ve neden diğeri değil ise işe yarıyor mu?

CEVAP
22 ŞUBAT 2010, PAZARTESİ


java.io.File ve cariyeler yerel disk dosya sistemi üzerinde çalışır. Senin sorunun kök nedeni bugörecelijava.io yol geçerli çalışma dizini bağlıdır. I. e. dizin (senin durumunda: Web sunucusu) başladı. Bunun için örnek C:\Tomcat\bin ya da bambaşka bir şey olabilir, ama böylecedeğilOlmasını beklediğiniz her neyse C:\Tomcat\webapps\contextname ya. Normal Eclipse projesi, C:\Eclipse\workspace\projectname olurdu. Geçerli çalışma dizini hakkında şu şekilde öğrenebilirsiniz:

System.out.println(new File(".").getAbsolutePath());

Ancak, çalışma dizini hiçbir şekilde Program aracılığıyla denetlenebilir. Gerçekten kullanmayı tercih etmelisinizmutlakFile yol, göreli yollar yerine API. E. g. C:\full\path\to\file.ext.

Veya (web)Java uygulamalarında mutlak yolunu koda tahmin etmek istemezsin. Sadece taşınabilirlik sorun (yani Sistem X, sistem içinde çalışır Y). Normal bir uygulama olarak o tür kaynaklara yerleştirmektirsınıftam yolu eklemek için , ya da (src klasör olan Eclipse gibi bir IDE ve "yol yapım" sırasıyla). sınıf Bu şekilde ClassLoader#getResource() ClassLoader#getResourceAsStream() ClassLoader yardımı ile onları yakala. Dosyalar "tesadüfen anladım." sınıf, köküne göre bulmak mümkün değildir Webapplications (veya birden fazla classloaders kullanan başka bir uygulama) Thread.currentThread().getContextClassLoader() tarafından döndürülen ClassLoader bunun için kullanılması tavsiye edilir.

Web uygulamasını başka bir alternatif ServletContext#getResource() ve muadili ServletContext#getResourceAsStream(). Erişim dosyaları Web projesi, /WEB-INF klasörü de dahil olmak üzere ** 20 ortak klasör içinde yer alan yapabiliyor. ServletContext getServletContext() kalıtsal bir yöntem ile sunucu uygulamalarına mevcuttur, olduğu gibi çağırabilirsiniz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • MagmaRhino

    MagmaRhino

    16 Temmuz 2011
  • WestsideMrArO

    WestsideMrAr

    6 EKİM 2010

İLGİLİ SORU / CEVAPLAR