У меня есть файл watstheday.txt
в папке src/main/resources
моего проекта, как показано в файле изображения ниже.
Я читаю файл с помощью метода getResourceAsStream()
метода ClassLoader
и выполняю дальнейшие действия в своем коде, который работает отлично. Однако, если я попытаюсь проверить, существует ли файл с помощью приведенного ниже кода, он всегда возвращает false.
try {
ClassLoader classLoader = getClass().getClassLoader();
System.out.println("!@#!@# so difficult to be simple..."+classLoader.getResource("watstheday.txt"));
//this returns false but the file is there
System.out.println("@#@ vertigo2 "+new File(classLoader.getResource("watstheday.txt").getFile()).isFile());
//this ALSO returns false but the file is there
System.out.println("@#@ vertigo2 "+new File(classLoader.getResource("watstheday.txt").getFile()).exists());
//Giving the / to mark the root of the application though that's not required
System.out.println("@#@ vertigo3 "+new File(classLoader.getResource("//watstheday.txt").getFile()).isFile());
//the below code with getResourceAsStream works absolutely fine and i can read the file
classLoader.getResourceAsStream("watstheday.txt");
BufferedReader buf = new BufferedReader(
new InputStreamReader(classLoader.getResourceAsStream("watstheday.txt")));
while (true) {
lineJustFetched = buf.readLine();
System.out.println(" @@#@ lineJustFetched =" + lineJustFetched);
}
buf.close();
} catch (Exception e) {
e.printStackTrace();
}
Я проконсультировался с следующим сообщения, прежде чем, наконец, задать этот вопрос, но не нашел, что я делаю не так. Когда я печатаю имя файла, оно печатается с полным путем развертывания, показанным как
!@#!@# so difficult to be simple... vfs=$my_server_deployment_folder_location$/helloworld/watstheday.txt
getResource(...).getFile()
не возвращает что-то, что вы можете передать конструкторуjava.io.File
, потому что это не одно и то же: В чем разница между ресурсом, URI, URL, путем и файлом в Java? - person Erwin Bolwidt   schedule 19.02.2018