Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/55: Рейтинг темы: голосов - 55, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 11.09.2012
Сообщений: 22

Сортировка списка файлов по алфавиту

22.09.2013, 23:59. Показов 10296. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго всем времени суток!=)

Я сиииильно начинающий, вот что-то сам по себе изучаю, книги читаю... Решил посмотреть, как с файлами работать, в качестве задания написал вот это:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import java.io.IOException;
import java.io.File;
 
class Main {
    
    public static void checkin(File x) {
        File [] fld = x.listFiles();
        
        for (int i = 0; i < fld.length; i++)
        {
            if (fld[i].isFile()) {
                System.out.println(fld[i].getName()+" "+fld[i].length()+"B");
            }
            else {
                checkin(fld[i]);
            }
        }
    }
    
    public static void main(String [] args) throws IOException {
        String path = args[0];
        
        File folder = new File(path);
        
        checkin(folder);
    }
}
И вот вопрос такой: а как сделать вывод сортированным по названию файла? Мой мозг сломан, не могу представить. Единственное, есть мысль запихнуть в ArrayList названия файлов и отсортировать дефолтным методом, но вообще слабо это себе представляю. В лист заливать только имена, или всю строку с размером? Откуда его запихивать?

Заранее извиняюсь, заранее всем спасибо=)

З.Ы. Для новичков тему не нашел - написал в корень. Не бейте.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.09.2013, 23:59
Ответы с готовыми решениями:

Сортировка списка по алфавиту
Подскажите, пожалуйста, как написать скрипт, который при загрузке страницы (событие onload) отсортирует список по алфавиту.

Сортировка списка по алфавиту
Задача создать список из латинских бук длиной от 1 до n и отсортировать его по алфавиту. Список я создал, но как отсортировать его по...

Сортировка списка по алфавиту
Добрый день,как нужно сделать сортировку списка по названию товара,с сортировкой нет проблем,проблема в доступе к полю с названием...

14
31 / 31 / 6
Регистрация: 11.07.2013
Сообщений: 241
23.09.2013, 03:39
Вместо того, чтобы выводить на консоль инфу о файле - записывай каждый файл в тот же ArrayList. А с сортировкой просто - класс File реализует интерфейс Comparable, сравнение идет как раз по именам файлов. Полученный ArrayList list сортируется
Java
1
Collections.sort(list);
1
0 / 0 / 0
Регистрация: 11.09.2012
Сообщений: 22
23.09.2013, 15:49  [ТС]
Цитата Сообщение от OxomHuK Посмотреть сообщение
Вместо того, чтобы выводить на консоль инфу о файле - записывай каждый файл в тот же ArrayList. А с сортировкой просто - класс File реализует интерфейс Comparable, сравнение идет как раз по именам файлов. Полученный ArrayList list сортируется
Java
1
Collections.sort(list);
Простите, я просто ArrayList до этого как-то не затрагивал:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import java.io.IOException;
import java.io.File;
 
class Main {
    
    public static void checkin(File x) {
        File [] fld = x.listFiles();
        
        ArrayList lst = new ArraList();
        
        for (int i = 0; i < fld.length; i++)
        {
            if (fld[i].isFile()) {
                lst.add(fld[i].getName);
                //System.out.println(fld[i].getName()+" "+fld[i].length()+"B");
            }
            else {
                checkin(fld[i]);
            }
        }
        
        for (int i = 0; i < fld.length; i++){
            System.out.println(lst.get(i));
        }
    }
    
    public static void main(String [] args) throws IOException {
        String path = args[0];
        
        File folder = new File(path);
        
        checkin(folder);
    }
}
Не компилится, я что-то нарушил, но не могу понять что. Нужно в мейне объявлять? А как записывать тогда?
0
352 / 162 / 20
Регистрация: 22.12.2011
Сообщений: 352
23.09.2013, 15:54
Цитата Сообщение от gudzon10 Посмотреть сообщение
Java
1
ArrayList lst = new ArraList();
Нужно указать тип и исправить ошибку синтаксиса:
Java
1
ArrayList<String> lst = new ArrayList<String>();
1
0 / 0 / 0
Регистрация: 11.09.2012
Сообщений: 22
23.09.2013, 15:58  [ТС]
Цитата Сообщение от Sakralbar Посмотреть сообщение
Нужно указать тип и исправить ошибку синтаксиса:
Java
1
ArrayList<String> lst = new ArrayList<String>();
Недостаточно, не компилится. Я так понимаю операции с ArrayList нужно в мейне проводить, а не в самой функции, да?
Миниатюры
Сортировка списка файлов по алфавиту  
0
 Аватар для _Den_
161 / 157 / 29
Регистрация: 21.09.2013
Сообщений: 487
Записей в блоге: 2
23.09.2013, 16:05
У вас ошибка синтаксиса ArraList вместо ArrayList. Указатель показывает в то место
1
352 / 162 / 20
Регистрация: 22.12.2011
Сообщений: 352
23.09.2013, 16:13
Ну и если вы хотите, чтоб функция выводила вам все файлы в директории и поддиректориях в алфавитном порядке, то вам надо поменять функцию, ибо при каждом рекурсивном вызове создается новый лист.
Я бы сделал наверное так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import java.io.IOException;
import java.io.File;
 
class Main {
    
    public static void listOfFiles(File x, ArrayList<String> fileList) {
        File [] fld = x.listFiles();
        
        for (int i = 0; i < fld.length; i++)
        {
            if (fld[i].isFile()) {
                fileList.add(fld[i].getName);
            }
            else {
                listOfFiles(fld[i], fileList);
            }
        } 
    }
    
    public static void main(String [] args) throws IOException {
        String path = args[0];
        
        File folder = new File(path);
        ArrayList<String> fileList = new ArrayList<String>();
        listOfFiles(folder, fileList);
        Collections.sort(fileList);
        for(String fileName: fileList){
            System.out.println(fileName);
        }
    }
}
Добавлено через 4 минуты
gudzon10, во-первых, вам нужно добавить
Java
1
import java.util.ArrayList;
во-вторых, исправить
Java
1
ArrayList<String> lst = new ArraList<String>();
на
Java
1
ArrayList<String> lst = new ArrayList<String>();
в-третьих, исправить
Java
1
lst.add(fld[i].getName);
на
Java
1
lst.add(fld[i].getName());
1
0 / 0 / 0
Регистрация: 11.09.2012
Сообщений: 22
23.09.2013, 16:14  [ТС]
Цитата Сообщение от _Den_ Посмотреть сообщение
У вас ошибка синтаксиса ArraList вместо ArrayList. Указатель показывает в то место

Да, точно, извиняюсь. Зрение всегда меня подводит) Но тем не менее, не помогло(
Миниатюры
Сортировка списка файлов по алфавиту  
0
 Аватар для _Den_
161 / 157 / 29
Регистрация: 21.09.2013
Сообщений: 487
Записей в блоге: 2
23.09.2013, 16:19
У вас getName это метод. Напишите getName()
Java
1
fileList.add(fld[i].getName());
1
0 / 0 / 0
Регистрация: 11.09.2012
Сообщений: 22
23.09.2013, 16:40  [ТС]
Кликните здесь для просмотра всего текста
Цитата Сообщение от Sakralbar Посмотреть сообщение
Ну и если вы хотите, чтоб функция выводила вам все файлы в директории и поддиректориях в алфавитном порядке, то вам надо поменять функцию, ибо при каждом рекурсивном вызове создается новый лист.
Я бы сделал наверное так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import java.io.IOException;
import java.io.File;
 
class Main {
    
    public static void listOfFiles(File x, ArrayList<String> fileList) {
        File [] fld = x.listFiles();
        
        for (int i = 0; i < fld.length; i++)
        {
            if (fld[i].isFile()) {
                fileList.add(fld[i].getName);
            }
            else {
                listOfFiles(fld[i], fileList);
            }
        } 
    }
    
    public static void main(String [] args) throws IOException {
        String path = args[0];
        
        File folder = new File(path);
        ArrayList<String> fileList = new ArrayList<String>();
        listOfFiles(folder, fileList);
        Collections.sort(fileList);
        for(String fileName: fileList){
            System.out.println(fileName);
        }
    }
}
Добавлено через 4 минуты
gudzon10, во-первых, вам нужно добавить
Java
1
import java.util.ArrayList;
во-вторых, исправить
Java
1
ArrayList<String> lst = new ArraList<String>();
на
Java
1
ArrayList<String> lst = new ArrayList<String>();
в-третьих, исправить
Java
1
lst.add(fld[i].getName);
на
Java
1
lst.add(fld[i].getName());

Ой, вот это я завтыкал. Жесть как туплю(
Скомпилилось, но после имени второго файла ексепшн. Я так понимаю что это из-за того что ArrayList в рекурсивной функции находится, попробую воспользоваться Вашим советом и исправить.

Еще раз огромное спасибо всем, я уж с ума начал сходить. Стремно, знаете ли - вроде понимаю все эти вещи по отдельности, а как доходит до дела - метаюсь в непонятках: что, где, куда...
Позже отпишусь, получилось ли. Еще раз спасибо!)

Добавлено через 20 минут
[QUOTE=Sakralbar;5089537]
Java
1
2
3
4
5
6
        Collections.sort(fileList);
        for(String fileName: fileList){
            System.out.println(fileName);
        }
    }
}
Разрешите еще один вопрос: а что это за конструкция вывода? Я понимаю что создается объект класса String и потом он выводится, а вот как он связывается через двоеточие с fileList? Извините, если глупый вопрос.
0
352 / 162 / 20
Регистрация: 22.12.2011
Сообщений: 352
23.09.2013, 16:45
gudzon10, https://blogs.oracle.com/CoreJ... loops_with
После каждой итерации цикла в переменную fileName записывается следующий элемент из fileList, пока следующий элемент есть в этом массиве.
По-моему, это тоже самое, что и такая запись:
Java
1
2
3
4
for(int i = 0; i < fileList.size(); i++){
    String fileName = fileList.get(i);
    System.out.println(fileName);
}
Если вам проще понять эту запись - используйте её.
1
 Аватар для _Den_
161 / 157 / 29
Регистрация: 21.09.2013
Сообщений: 487
Записей в блоге: 2
23.09.2013, 16:48
Почитайте про foreach в Java и все поймете.
1
0 / 0 / 0
Регистрация: 11.09.2012
Сообщений: 22
23.09.2013, 16:58  [ТС]
Цитата Сообщение от Sakralbar Посмотреть сообщение
gudzon10, https://blogs.oracle.com/CoreJ... loops_with
После каждой итерации цикла в переменную fileName записывается следующий элемент из fileList, пока следующий элемент есть в этом массиве.
По-моему, это тоже самое, что и такая запись:
Java
1
2
3
4
for(int i = 0; i < fileList.size(); i++){
    String fileName = fileList.get(i);
    System.out.println(fileName);
}
Если вам проще понять эту запись - используйте её.
Я написал вот так:
Java
1
2
3
for (int i = 0; i < lst.size(); i++){
            System.out.println(lst.get(i));
        }
Это чем-то хуже? Мне так вроде понятнее...
0
 Аватар для _Den_
161 / 157 / 29
Регистрация: 21.09.2013
Сообщений: 487
Записей в блоге: 2
23.09.2013, 17:10
Ничем не хуже, точно так же, просто вы не создаете переменную, а выводите сразу. Но если вам нужно использовать эти данные и дальше в вашей программе, то согласитесь проще использовать переменную чем постоянно обращаться к коллекции для вывода
1
0 / 0 / 0
Регистрация: 11.09.2012
Сообщений: 22
23.09.2013, 17:19  [ТС]
Цитата Сообщение от _Den_ Посмотреть сообщение
Ничем не хуже, точно так же, просто вы не создаете переменную, а выводите сразу. Но если вам нужно использовать эти данные и дальше в вашей программе, то согласитесь проще использовать переменную чем постоянно обращаться к коллекции для вывода
Да, действительно, как-то не подумал. Надеюсь, это пройдет(

Еще раз спасибо огромное всем, все получилось=)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.09.2013, 17:19
Помогаю со студенческими работами здесь

Сортировка списка по алфавиту
#include &lt;iostream&gt; #include &lt;string&gt; #include &lt;vector&gt; #include &lt;stdlib.h&gt; #include &lt;iomanip&gt; using namespace std; ...

Сортировка списка по алфавиту
Есть двусвязный список: struct Stud { char fam; int ball; double sred = 0; }; struct List { Stud man; List *next,...

Сортировка списка по алфавиту
Доброго времени суток! Составить программу сортировки списка учащихся по алфавиту, список может быть отдельным файлом, а может быть введён...

Сортировка списка по алфавиту о обратно.
Нужно обеспечить сортировку списка в TListBox по алфавиту,против алфавита,а также восстанавливать порядок умолчания.

Сортировка многоуровневого ( вложенного) списка по алфавиту
подскажите, как отсортировать по алфавиту вложенный список, типа &lt;ul &gt; &lt;li&gt;иванов &lt;ul&gt; &lt;li&gt;иван&lt;/li&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru