Я думаю, многое зависит от вашей конечной цели.Если это просто для того, чтобы распечатать данные, или если вам нужно обработать данные, или если вам нужно манипулировать ими алгоритмически.
Мой инстинкт инстинкта состоит в том, чтобы делать все это с использованием LinkedHashMap
и в основном делатьэто карта карты, и т. д. Однако сделать это аккуратно может быть немного сложно, поскольку у вас есть два различных возможных значения для вашей карты - папка и файл.Обратите внимание, что LinkedHashMap используется для поддержания порядка данных при их вставке.Если вы хотите, чтобы это было отсортировано, или в случайном порядке, то вы можете выбрать другие реализации.
По сути, я бы увидел это как что-то вроде следующего (псевдокод)
public interface DirectoryEntry{
boolean isFile;
boolean isFolder;
}
public class Folder implements DirectoryEntry{
public boolean isFile(){ return false;}
public boolean isFolder(){ return true;}
private Map<String, DirectoryEntry> entries = new LinkedHashMap<String, DriectoyrEntry>();
public Map<String, DirectoryEntry>getEntries(){ return entries;}
public void addFile( String filename ){ entries.put( filename, new File();}
public void addFolder( String foldername){entries.put(foldername, new Folder();}
}
public class File implements DirectoryEntry{
public boolean isFile(){ return true;}
public boolean isFolder(){ return false;}
}
Затем соберитедерево (вы также можете сделать это рекурсивно):
Map<String, DirectoryEntry> entries = new LinkedHashMap<String, DirectoryEntry>()
while( !end of list){
Map entry = entries;
1. Split string on '/'
2. foreach( token ){
if file
entries.put( token, new File() );
else{
if( !entry.containsKey( token ) )
entry.put(token, new Folder );
// use the folder map for any sub-folders/files
entry = ((Folder)entry.get( token )).getEntries();
}
}
}
Затем вы можете просмотреть свой окончательный список и играть с ним, как вам нравится.Я специально создал Файл и Папку, но вы можете добавить туда дополнительные метаданные / информацию, если у вас есть необходимость.
Имейте в виду, что это всего лишь один из вариантов, чтобы дать вам представление о том, как анализировать/ map файлы / папки, но не предназначенные как функциональное решение, как есть.
Что касается того, проще ли сначала анализировать и печатать, как я уже сказал, все зависит от того, чего вы надеетесь достичь с помощью окончательного варианта.набор данных.Но мой инстинктивный инстинкт должен был бы проанализировать все это и затем показать то, что вы проанализировали, чтобы убедиться, что то, что вы показываете, является тем, что вы «поняли» и будете манипулировать им.