java.io.FileVe eşleri yerel disk dosya sistemine etki eder. Sorununuzun temel nedeni, göreli yolların java.iogeçerli çalışma dizinine bağlı olmasıdır. Yani JVM'nin (sizin durumunuzda: web sunucusunun biri) başlatıldığı dizin. Bu, örneğin olabilir C:\Tomcat\binveya tamamen farklı, ama böylece bir şey değil C:\Tomcat\webapps\contextname ya da ne olmasını beklersiniz. Normal bir Eclipse projesinde bu olurdu C:\Eclipse\workspace\projectname. Geçerli çalışma dizini hakkında şu şekilde bilgi edinebilirsiniz:
System.out.println(new File(".").getAbsolutePath());
Ancak, çalışma dizini hiçbir şekilde program aracılığıyla denetlenemez. Gerçekten göreli yollar yerine API'da mutlak yollar kullanmayı tercih etmelisiniz File. ÖrneğinC:\full\path\to\file.ext .
Java (web) uygulamalarında sabit kod yazmak veya mutlak yolu tahmin etmek istemezsiniz. Bu sadece taşınabilirlik sorunudur (yani X sisteminde çalışır, ancak Y sisteminde çalışmaz). Normal uygulama, bu tür kaynakları sınıfyoluna yerleştirmek veya sınıf yoluna tam yolunu eklemektir ( srcsırasıyla klasör ve "oluşturma yolu" olan Eclipse gibi bir IDE'ye ). Eğer yardımıyla onları yakala Bu şekilde ClassLoadertarafından ClassLoader#getResource()veya ClassLoader#getResourceAsStream(). Tesadüfen tesadüf olarak dosyaları sınıf yolunun "kökü" ne göre bulabilir. Web uygulamalarında (veya birden fazla sınıf yükleyici kullanan başka bir uygulamada) ClassLoadertarafından döndürülen şekilde kullanılması önerilir.Thread.currentThread().getContextClassLoader() için böylece webapp bağlamının "dışına" da bakabilirsiniz.
Webapps'teki diğer bir alternatif ServletContext#getResource()ve onun karşılığıdır ServletContext#getResourceAsStream(). webKlasör de dahil olmak üzere webapp projesinin ortak klasöründe bulunan dosyalara erişebilir /WEB-INF. ServletContextMiras yoluyla servlet mevcutturgetServletContext() yöntemle, bunun gibi kullanıldı çağırabilir.
Ayrıca bakınız: