2017-02-19 34 views
0

при попытке подсчитать, сколько подкаталогов есть в пути к файлу, что было бы лучшим способом сделать это?подсчет уровня вложенности в папке с файлом

Например, я хочу проверить, что файл file.txt в /a/b/c/d/file.txt имеет только 3 подкаталога между собой и корневой папкой. Есть ли способ сделать это, о котором я не слышал?

В настоящее время я использую метод подсчитать, сколько родительских каталогов есть вверх от file.txt делать что-то похожее на:

boolean lessThan3Subdirectories(File textFile){ 
File homeFile = new File (/a); 
if (textFile.getParent() 
      .getParentFile() 
      .getParentFile() 
      .getParentFile() 
      != homeFile){ 
return false; 
} else { 
return true; 
} 

Моя проблема этого метода состоит в том, что он жёстко, чтобы проверить 3 и всегда 3, но мне на самом деле все равно, сколько родительских каталогов требуется, чтобы добраться туда до тех пор, пока оно меньше 3. (/a/b/file.txt в порядке)

Моим другим вариантом было бы просто введите строку пути к файлу и подсчитайте количество раз «/» между файлом и домашней папкой. Проблема с этим методом, однако, заключается в том, что я не могу учитывать имена файлов, которые включают экранированные/(т.е.. "/")

+0

Почему вы не можете использовать петлю? – CKing

ответ

0

Ok. вот что вы можете написать рекурсивную функцию. я могу дать вам скелет. Эта функция вернет вам глубину, на которой присутствует ваш файл.

 int recurFunc(String path, String fileNameToCheck){ 

      //1. count all the files in given directory 
      //2. Write a for loop for each file checking if its a directory or file. 
      //3. if its a directory call recurFunc with directory name appended. (return 1 + recurFunc(directorypath)). This will give you the depth 
      //4. if its a file check if its your required file or not 
      //5. if its your file return 0;else skip 

     } 

Кроме того, если вы хотите ограничить поиск до 3 уровня только пройти уровень в recurFunc (путь String, String FileName, уровень INT) и при переходе в каталог уменьшить уровень 1. Когда уровень 0 раз проверьте, содержит ли этот уровень ваш файл или нет.