Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
1 / 1 / 4
Регистрация: 28.09.2011
Сообщений: 113

Как выбрать файл рандомно

27.10.2012, 00:11. Показов 3343. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вообщем, получается выбрать рандомно файл, если нет ещё внутренних папок. Как сделать, чтобы выбирался рандомно файл, даже если внутри будут ещё папки и в папках ещё папка?

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
35
36
37
    public String chooseRndFile() {
        Random rnd = new Random();
        File file = new File("C:\\Video");
        file.canExecute();
        String filmFile = null;
        if (file.exists()) {
            String[] dir = file.list();
            int rndDir = rnd.nextInt(dir.length);
            System.out.println(dir[rndDir]);
            filmFile = dir[rndDir];
        }
        return filmFile;
    }
 
    public void executeRndFile(String file) throws IOException, InterruptedException {
        try {
            if ((new File("C:\\Video\\" + file)).exists()) {
                Process p = Runtime
                        .getRuntime()
                        .exec("rundll32 url.dll,FileProtocolHandler C:\\Video\\" + file);
                p.waitFor();
            } else {
                System.out.println("File is not exists");
            }
            System.out.println("Done");
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
 
    public static void main(String[] args) throws IOException, InterruptedException {
 
        Main main = new Main();
        main.chooseRndFile();
        String film = main.chooseRndFile();
        main.executeRndFile(film);
    }
Добавлено через 1 час 36 минут
Программа должна случайно выбрать файл и запустить его.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.10.2012, 00:11
Ответы с готовыми решениями:

Рандомно выбрать один объект из нескольких
У меня есть n объектов 1 класса. Как из них выбрать рандомный?

Как заменить в строке символ рандомно
Здравствуйте уважаемые форумчане, всех с наступающим и успехов в нашем нелегком деле. У меня есть строка:String text =...

Как рандомно выбрать из текста слово?
Допустим,у меня в текстовом документе есть слова.Мне надо чтоб он при нажатии на кнопку выводил в едит или лейбл рандомные(любые) слова,из...

8
Эксперт функциональных языков программированияЭксперт по математике/физике
4313 / 2105 / 431
Регистрация: 19.07.2009
Сообщений: 3,204
Записей в блоге: 24
27.10.2012, 00:17
Цитата Сообщение от jvov Посмотреть сообщение
Как сделать, чтобы выбирался рандомно файл, даже если внутри будут ещё папки и в папках ещё папка?
Нужно, чтобы выбирался рандомно файл из тех, которые лежат непосредственно в каталоге, или из всех файлов, которые лежат в каталоге, подкаталоге или где-то ещё глубже?
0
1 / 1 / 4
Регистрация: 28.09.2011
Сообщений: 113
27.10.2012, 00:21  [ТС]
Цитата Сообщение от Mysterious Light Посмотреть сообщение
Нужно, чтобы выбирался рандомно файл из тех, которые лежат непосредственно в каталоге, или из всех файлов, которые лежат в каталоге, подкаталоге или где-то ещё глубже?
Которые лежат просто в каталоге у меня работает.

А хочу, чтобы из всех, которые лежат в каталоге и подкаталоге и глубже и в других папках если есть в данном каталоге. То есть, есть каталог и надо там выбрать рандомно фаил независимо какая у него дальше будет там структура папок - надо пробежаться везде и запустить рандомно один файл.
0
Эксперт функциональных языков программированияЭксперт по математике/физике
4313 / 2105 / 431
Регистрация: 19.07.2009
Сообщений: 3,204
Записей в блоге: 24
27.10.2012, 00:33
Могу предложить Вам составить список (List) всех файлов (используя, например, рекурсивный проход в глубину) и возвратить случайный элемент этого списка. Такой вариант подходит?
0
1 / 1 / 4
Регистрация: 28.09.2011
Сообщений: 113
27.10.2012, 00:45  [ТС]
Цитата Сообщение от Mysterious Light Посмотреть сообщение
Могу предложить Вам составить список (List) всех файлов (используя, например, рекурсивный проход в глубину) и возвратить случайный элемент этого списка. Такой вариант подходит?
Да, вполне. Буду очень благодарен.
0
Эксперт функциональных языков программированияЭксперт по математике/физике
4313 / 2105 / 431
Регистрация: 19.07.2009
Сообщений: 3,204
Записей в блоге: 24
27.10.2012, 01:16
Набросок:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    public static ArrayList<String> getFiles(String path) {
        ArrayList<String> list = new ArrayList<String>();
        File file = new File(path);
        // if(! file.exists()) return null;
        String[] files = file.list();
        if(files == null) {
            list.add(path);
        }
        else
            for(String subfile : files)
                list.addAll(getFiles(file.getAbsolutePath()+"/"+subfile));
        return list;
    }
    public static <E> E getRndEl(List<E> list) {
        Random rnd = new Random();
        int rndV = rnd.nextInt(list.size())
        return list.get(rndV);
    }
    /*  usage: getRndEl(getFiles(pathname))  */
1
1 / 1 / 4
Регистрация: 28.09.2011
Сообщений: 113
27.10.2012, 18:38  [ТС]
Цитата Сообщение от Mysterious Light Посмотреть сообщение
Набросок:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    public static ArrayList<String> getFiles(String path) {
        ArrayList<String> list = new ArrayList<String>();
        File file = new File(path);
        // if(! file.exists()) return null;
        String[] files = file.list();
        if(files == null) {
            list.add(path);
        }
        else
            for(String subfile : files)
                list.addAll(getFiles(file.getAbsolutePath()+"/"+subfile));
        return list;
    }
    public static <E> E getRndEl(List<E> list) {
        Random rnd = new Random();
        int rndV = rnd.nextInt(list.size())
        return list.get(rndV);
    }
    /*  usage: getRndEl(getFiles(pathname))  */
Спасибо огромное! Проверил все работает!

Не могли бы, Вы, пояснить, немного по коду:
Java
1
2
3
 if(files == null) {
            list.add(path);
        }
Почему мы тут сравниваем с null?
И в list добавляем просто путь, зачем?

Java
1
2
for (String subfile : files)
                list.addAll(getFiles(file.getAbsolutePath() + "/" + subfile));
Хоть убей, не могу понять рекурсию, не могли бы вы, по шагам алгоритм пояснить? Я понимаю, что
он вызывает сам себя, но вот в голове не укладывается чтобы проследить его работу)
0
Эксперт функциональных языков программированияЭксперт по математике/физике
4313 / 2105 / 431
Регистрация: 19.07.2009
Сообщений: 3,204
Записей в блоге: 24
28.10.2012, 16:30
Цитата Сообщение от jvov Посмотреть сообщение
Не могли бы, Вы, пояснить, немного по коду:
Java
1
2
3
 if(files == null) {
            list.add(path);
        }
Почему мы тут сравниваем с null?
И в list добавляем просто путь, зачем?
Java
1
2
for (String subfile : files)
                list.addAll(getFiles(file.getAbsolutePath() + "/" + subfile));
Вообще, возможны три ситуации:
1. Ничего по указанному пути не существует.
2. Указан файл.
3. Указана директория.

Первый вариант я отбросил (4-я строка закоментирована). Остаются два варианта.
Если передан файл, то его мы и возвращаем. Более точно, мы возвращаем одноэлементный список с этим файлом.
Если передан путь директории, то мы (с рекурсией) создаём список всех файлов в каждой поддиректории и объединяем эти списки в один. Поскольку мне лень было проверять каждое имя в списке имён files на то, директория это или файл, здесь удобно воспользоваться поведением функции на файле, описанное выше. Таким образом, на выходе получаем объединение всех списков файлов в поддиректориях и одноэлементных списков всех собственных файлов, т.е. профит.

P.S. в описании метода File.list() сказано, что функция возвращает список файлов и папок директории, null, если указана не директория и выкинет IOException во всех остальных случаях. Этим я пользуюсь, чтоб узнать файл это или директория. Всё равно этот метод нужно будет вызвать.
1
1 / 1 / 4
Регистрация: 28.09.2011
Сообщений: 113
28.10.2012, 22:26  [ТС]
Цитата Сообщение от Mysterious Light Посмотреть сообщение
Вообще, возможны три ситуации:
1. Ничего по указанному пути не существует.
2. Указан файл.
3. Указана директория.

Первый вариант я отбросил (4-я строка закоментирована). Остаются два варианта.
Если передан файл, то его мы и возвращаем. Более точно, мы возвращаем одноэлементный список с этим файлом.
Если передан путь директории, то мы (с рекурсией) создаём список всех файлов в каждой поддиректории и объединяем эти списки в один. Поскольку мне лень было проверять каждое имя в списке имён files на то, директория это или файл, здесь удобно воспользоваться поведением функции на файле, описанное выше. Таким образом, на выходе получаем объединение всех списков файлов в поддиректориях и одноэлементных списков всех собственных файлов, т.е. профит.

P.S. в описании метода File.list() сказано, что функция возвращает список файлов и папок директории, null, если указана не директория и выкинет IOException во всех остальных случаях. Этим я пользуюсь, чтоб узнать файл это или директория. Всё равно этот метод нужно будет вызвать.
Большое спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.10.2012, 22:26
Помогаю со студенческими работами здесь

Как рандомно выбрать один из трех массивов?
Есть три массива с инфой и мне нужно рандомно выбрать один из этих трех массивов и взять его инфу. Как это можно сделать?

Как рандомно выбрать комбинации из 4 точек массива?
Вечер добрый. Возникла проблема с генерацией случайных неповторяющихся индексов. у меня имеется массив типа Point, необходимо...

Как рандомно выбрать из массива одно из двух значений?
Здравствуйте, господа. В общем, есть строковый массив: public String availability = new String { &quot;+&quot;, &quot;-&quot; }; ...

Как выбрать рандомно ячейку таблицы и подсветить ее зеленым цветом?
1) при первой загрузке страницы на JavaScript случайным образом должны быть выбраны день недели(столбец) и номер пары(строка), и под...

Как значения из одномерного массива вывести и рандомно выбрать одно из них
alexekoz, for (int n = a; n &gt;= 1; n--) { if (a % n == 0) { ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru