Одним из распространенных способов загрузки файла ресурсов является использование метода Class.getResource(String name)
, который выполняет поиск из classpath
приложения.
FileReader
может читать из файла даже за пределами папки проекта с двойными точками. Например, с помощью eclipse вы можете прочитать workspace/test.txt
с помощью ../test.txt
. Но когда я играл с методом getResource()
, он мог получить файл с нотацией с двойной точкой только тогда, когда файл находится в папке bin
. Если вы поместите файл за пределы папки bin
, запись с двумя точками больше не работает. Я попытался проследить исходный код до ClassLoader.getResource()
, ClassLoader.parent.findResouce()
и sun.misc.Launcher$AppClassLoader
, но не смог разобраться дальше. это на виндовс 10.
Я должен добавить пример здесь. У меня есть файл test.txt и проект Java1 в eclipse.
workspace/project1/src/package1/test.java
может прочитать файл test.txt из
workspace/test.txt
местоположение с "../test.txt" с FileReader (расположение по умолчанию для eclipse кажется рабочей областью/проект1/). Но с getResouce() запись с двумя точками работает до тех пор, пока файл помещается в рабочую область/проект1/bin, но не из папки bin.
У меня есть вопросы по вышеизложенному:
1, почему запись с двумя точками не может вывести вас из папки bin
с помощью getResouce()
, но может сделать это с помощью FileReader
?
2. Учитывая поведение getResouce()
, я предполагаю, что eclipse успешно добавил каталог bin
в проект classpath
. В файле .classpath
для проекта есть еще одна строка:
<classpathentry kind="src" path="src"/>
Папка src
не добавляется в classpath
? Так как getResouce()
там вроде не ищет.