As java.io.Fileconsorts e atuam no sistema de arquivos do disco local. A causa raiz do seu problema é que os caminhos relativosjava.io são dependentes do diretório de trabalho atual. Ou seja, o diretório a partir do qual a JVM (no seu caso: a do servidor da web) é iniciada. Por exemplo, isso pode ser C:\Tomcat\binou algo completamente diferente, mas, portanto, não C:\Tomcat\webapps\contextname ou o que você espera que seja. Em um projeto normal do Eclipse, isso seria C:\Eclipse\workspace\projectname. Você pode aprender sobre o diretório de trabalho atual da seguinte maneira:
System.out.println(new File(".").getAbsolutePath());
No entanto, o diretório de trabalho não é de forma programável controlável. Você realmente deve preferir usar caminhos absolutos na FileAPI em vez de caminhos relativos. Por exemplo C:\full\path\to\file.ext.
Você não deseja codificar ou adivinhar o caminho absoluto nos aplicativos Java (web). Isso é apenas um problema de portabilidade (ou seja, é executado no sistema X, mas não no sistema Y). A prática normal é colocar esse tipo de recursos no caminho de classe ou adicionar seu caminho completo ao caminho de classe (em um IDE como o Eclipse, essa é a srcpasta e o "caminho de construção", respectivamente). Desta forma, você pode pegá-los com a ajuda do ClassLoaderby ClassLoader#getResource()ou ClassLoader#getResourceAsStream(). Ele é capaz de localizar arquivos relativos à "raiz" do caminho de classe, como você descobriu por coincidência. Nos aplicativos da web (ou em qualquer outro aplicativo que use vários carregadores de classe), é recomendável usar o valor ClassLoaderretornado Thread.currentThread().getContextClassLoader()para que você possa procurar "fora" do contexto do aplicativo da web.
Outra alternativa nos aplicativos da web é a ServletContext#getResource()e sua contraparte ServletContext#getResourceAsStream(). É capaz de acessar arquivos localizados na webpasta pública do projeto webapp, incluindo a /WEB-INFpasta. O ServletContextestá disponível em servlets pelo getServletContext()método herdado , você pode chamá-lo como está.
Veja também: