Я использую Java для поиска файла или папки, соответствующей конкретному случаю. Например, я хочу просмотреть все файлы и папки и повторять их столько раз, сколько потребуется, пока не найду результат.
Улов
Я ищу файлы и папки через двоичный образ файловой системы. Это означает, что я сомневаюсь, что существуют какие-либо ранее существовавшие классы, такие как java.file.*
, чтобы сделать это для меня. Если это поможет, я могу вам сказать, что могу достаточно легко определить разницу между файлами и папками. (папка помечена как 0x20)
Единственный способ, которым я могу придумать, - это сделать стандартный цикл и выполнить итерации несколько раз, но это ограничивает меня, если файл или папка имеют несколько папок глубиной.
Весь ввод приветствуется
Редактировать
Просто чтобы уточнить, я использую двоичное изображение и ищу его по каталогам.
Я думаю, что термин "каталог" может вводить в заблуждение. Учитывая начальное значение 0, я хочу изучить серию байтов. Если в правильном месте я сталкиваюсь с 0x20 (маркер каталога), мне нужно перейти в новое место в двоичном изображении и начать поиск снова. Если я снова столкнусь с 0x20, мне нужно прыгнуть и начать снова; по окончании я возвращаюсь к той точке, в которой находился, и продолжаю искать другой 0x20 Мне нужно делать это до тех пор, пока у меня не останется 0x20 в определенных местах.
Я могу сделать это, используя петли n , но это займет у меня только n каталогов. Мне интересно, есть ли у кого-нибудь идеи, как это сделать, пока не останется больше маркеров каталога.
Не совсем уверен, что это проясняет ситуацию, но я надеюсь, что это так.
EDIT
Это код, который я использую, и я получаю ошибку переполнения стека. какие-нибудь идеи о том, как я могу улучшить это?
public boolean isDirectory(int dirAttr)
{
if (dirAttr == dir.ATTR_DIRECTORY)
return true;
else return false;
}
public void searchDirectory(int clusterNum, String name)
{
for (int i = 0; i<32;i++)
{
if(dir.DIR_NameS(clusterNum, i).contains(name))
{
System.out.println("Found a Match");
System.out.println("File name = " + dir.DIR_NameS(clusterNum, i));
System.out.println("File size in bytes = "+dir.DIR_FileSize(clusterNum, i));
System.out.println("File starting cluster = "+dir.DIR_FstClusLO(clusterNum, i));
System.out.println();
}
if(this.isDirectory(dir.DIR_Attr(clusterNum, i)))
{
searchDirectory(dir.DIR_FstClusLO(clusterNum, i), name);
}
}
}