2016-11-01 3 views
0

Я хочу прочитать файл в переменной String, которая находится на базовом уровне моего проекта Maven.Как читать текстовый файл на базовом уровне проекта java maven

enter image description here

В этом примере я пытаюсь прочитать файл "somerando.sql".

Я пытался использовать:

Path path = Paths.get("/myproj/somerando.sql"); 
String sql = new String(Files.readAllBytes(path)); 

но не получает его. Есть ли способ, по которому я могу прочитать файл здесь, без использования его абсолютного пути на компьютере?

+1

Почему вы не поместите файл в '/ SRC/основной/resources', а затем прочитать оттуда файл, используя' Paths.get (ClassLoader.getSystemResource ("somerando.sql"). ToURI()); ' – Omoro

ответ

1

У Maven есть некоторые соглашения, вы должны попытаться следовать им. Это полезно.

Кроме того, после разработки приложение не живет в проекте Maven, а в компоненте (Jar/war и т. Д.). Итак, чтобы избежать абсолютного пути, вы должны поместить свои файлы, необходимые для приложения или тестирования, в соответствующие папки классов.

если ваш файл для тестирования, вы можете переместить его в место, зарезервированное Maven для удовлетворения этой потребности: yourMavenProject/src/test/resources

Если файл для приложения, вы можете переместить его в место, зарезервированном Maven для удовлетворения этой потребности: yourMavenProject/src/main/resources

Теперь вы можете получить доступ к его:

Path path = Paths.get(YourClass.class.getResource("filter.xml").toURI()); 
+0

Я все еще изучаю «лучшие практики». Это хорошая информация. –

0

Вы уверены, что вы не смешиваете путь проекта eclipse с дорожкой ОС?

+0

Я все еще новичок в мире java/eclipse. Итак, нет. Я не уверен, что я не смешиваю его. –

1

Использование:

Path path = Paths.get("somerando.sql"); 
String sql = new String(Files.readAllBytes(path)); 

без предшествующей косой черты. Помните, что если он не начинается с косой черты, API-интерфейс Path будет разрешать ваш путь к рабочему каталогу JVM.

Он не знает способ разрешения файлов Eclipse, где корень (/) может считаться относительно его рабочего пространства.

На боковой стороне будьте внимательны при создании строк без указания кодировки.

+0

Это имеет смысл, однако File.readAllBytes (путь) ничего не возвращает, и мне кажется, что путь по-прежнему неверен. Мысли? –

+0

Вы всегда можете задать вопрос: 'path.toFile(). Exists()' – Daniel

Смежные вопросы