2016-02-11 7 views
1

Мне бы очень хотелось узнать, как я могу прочитать все записи из пакета на Java. С помощью метода getRessource() вы можете получить один файл. Но я хочу их всех! Мой план состоит в том, чтобы прочитать все файлы из папки/пакета (без поддиректа), а затем использовать Stream для фильтрации записей.Читать все Файлы из пакета в Java

Надеюсь, вы можете мне помочь.

+0

Вы читаете их из банки? Это технически zip-файл, поэтому вы можете рассматривать его как таковой. –

+3

Возможный дубликат [Как просмотреть все классы из пакета Java в пути к классам?] (Http://stackoverflow.com/questions/1456930/how-do-i-read-all-classes-from-a-java -package-in-the-classpath) – Ferrybig

+1

Ну, это не столько дубликаты, поскольку этот раздел касается файлов (ресурсов), но другой занимается классами. – Ducaz035

ответ

-1

Вы можете получить список всех файлов, а затем фильтровать их:

File d = new File(System.getProperty("user.dir")); // user.dir returns the current working directory. 

for(File f : d.listFiles()) 
{ 
    //do what you want to do 
} 
+0

Это выглядит хорошо. Теперь user.dir дал мне все файлы в моей корневой папке проекта. Как изменить параметр, чтобы получить файлы в определенном каталоге, например, src/test/ressources ?? Если я изменю такой параметр, я получаю исключение NullPointerException. – zesaro

+0

@SaschaZeller Конкатенация. Используйте: 'new File (System.getProperty (« user.dir ») +«/src/test/ressources »)' – Hackerdarshi

+1

О, вау, ребята ... Этот ответ полон плохой практики. Что делать, если ваша программа упакована в виде банки? Что делать, если он запускается из-за пределов своего каталога сборки? И почему мы конкатенируем пути к файлам? Это полностью противоречит духу Java, который пишется один раз - везде. – RAnders00

1

Вы можете добиться этого с помощью Spring Framework. Даже если вы не разрабатываете приложение Spring, вы все равно можете использовать их утилиты. Вы хотите использовать PathMatchingResourcePatternResolver:

public Resource[] getResources(String package) 
{ 
    PathMatchingResourcePatternResolver pmrpr = new PathMatchingResourcePatternResolver(); 
    // turns com.myapp.mypackage into /com/myapp/mypackage/* 
    return pmrpr.getResources("/" + package.replace(".", "/") + "/*"); 
} 

Для справки см:

Если вы используете Maven, используйте эту зависимость:

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-context</artifactId> 
    <version>4.2.4.RELEASE</version> 
</dependency> 
0

Вы можете сделать это с помощью библиотеки Reflections.

Можно просто создать объект отражения и позволить ему выполнить сканирование. Было бы так же просто, как сделать что-то вроде

Reflections reflections = new Reflections("my.package"); 
Set<String> resourceStrings = reflections.getResources(s -> true /*match all resources*/); 
Set<URL> resources = resourceStrings.stream() 
            .map(s -> getClass().getResource(s)) 
            .collect(Collectors.toSet()) 
Смежные вопросы