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

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

22.09.2013, 23:59. Показов 10243. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru