Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Список файлов в папке.


Автор: jone31 17.10.2009, 21:14
Здрасти, нужна помощь по двум вопросам:
1) как узнать сколько файлов находится в папке???

2) как из вышеполученной цифры выбрать случайный номер???

заранее благодарен.

Добавлено через 2 минуты и 32 секунды
случайный номер сейчас выбираю так:
Код
int R = (int) ((Math.random()*9));  , где 9 - кол-во файлов.

но думаю что это не совсем правильно...

Автор: Sadness 18.10.2009, 00:48
Ну например так:
Код
import java.io.File;

public class Main {

    public static void main(String[] args) {

    String path = "/path/folder";

    File file = new File(path);

    int count = file.listFiles().length;

    int number = (int) ((Math.random() * count));

    }

}


Автор: magicfly 18.10.2009, 02:54
Лучше не использовать класс Math лучше использовать класс Random
Random.nextInt(n) возвращает число(Int) от нуля включительно до n невключительно.
Хотелось бы так же заметить что file.listFiles() вернет так же директории

Автор: Sadness 18.10.2009, 13:45
Цитата(magicfly @ 18.10.2009,  02:54)
Лучше не использовать класс Math лучше использовать класс Random
Random.nextInt(n) возвращает число(Int) от нуля включительно до n невключительно.
Хотелось бы так же заметить что file.listFiles() вернет так же директории

Перед сном уже писал пример, не заметил что он работает не корректно smile
Вот изменил:
Код

import java.io.File;
import java.io.FileFilter;
import java.util.Random;

public class Main {

    public static void main(String[] args) {

    String path = "/path/folder";
    File file = new File(path);

    File[] files = file.listFiles(new FileFilter() {

        @Override
        public boolean accept(File filename) {
        return filename.isFile();
        }
    });

    int count = files.length;
    
    Random random = new Random();
    int number = random.nextInt(count);

    }

}


Автор: jone31 18.10.2009, 19:57
Цитата(Sadness @  18.10.2009,  13:45 Найти цитируемый пост)
Перед сном уже писал пример, не заметил что он работает не корректно Вот изменил: .......


выдаёт ошибку
Код
java.lang.NullPointerException: Null Pointer while evaluating: files.length
        at bsh.Name.consumeNextObjectField(Unknown Source)
ERROR - java.lang.NullPointerException: Null Pointer while evaluating: files.len
gth
        at bsh.Name.toObject(Unknown Source)
ERROR -
        at bsh.BSHAmbiguousName.toObject(Unknown Source)
ERROR -         at bsh.Name.consumeNextObjectField(Unknown Source)
        at bsh.BSHAmbiguousName.toObject(Unknown Source)
ERROR -
        at bsh.BSHPrimaryExpression.eval(Unknown Source)
        at bsh.BSHPrimaryExpression.eval(Unknown Source)ERROR -         at bsh.N
ame.toObject(Unknown Source)

ERROR -
        at bsh.BSHVariableDeclarator.eval(Unknown Source)ERROR -        at bsh.B
SHAmbiguousName.toObject(Unknown Source)

        at bsh.BSHTypedVariableDeclaration.eval(Unknown Source)ERROR -

        at bsh.BSHBlock.evalBlock(Unknown Source)ERROR -        at bsh.BSHAmbigu
ousName.toObject(Unknown Source)

        at bsh.BSHBlock.eval(Unknown Source)ERROR -

ERROR -         at bsh.BSHPrimaryExpression.eval(Unknown Source)
        at bsh.BSHBlock.eval(Unknown Source)
ERROR -
        at bsh.BSHIfStatement.eval(Unknown Source)
ERROR -         at bsh.BSHPrimaryExpression.eval(Unknown Source)
        at bsh.Interpreter.eval(Unknown Source)ERROR -

        at bsh.Interpreter.eval(Unknown Source)ERROR -  at bsh.BSHVariableDeclar
ator.eval(Unknown Source)

        at bsh.Interpreter.eval(Unknown Source)ERROR -

        at ru.jimbot.modules.WorkScript.startAdminScript(WorkScript.java:131)ERR
OR -    at bsh.BSHTypedVariableDeclaration.eval(Unknown Source)

        at ru.jimbot.modules.chat.RobAdmin.parse(RobAdmin.java:84)ERROR -

        at ru.jimbot.modules.chat.RobAdmin.run(RobAdmin.java:276)ERROR -
at bsh.BSHBlock.evalBlock(Unknown Source)

        at java.lang.Thread.run(Unknown Source)
ERROR -
ERROR -         at bsh.BSHBlock.eval(Unknown Source)
INFO - Ошибка скрипта: Sourced file: inline evaluation of: ``import java.util.Ve
ctor; import java.util.concurrent.ConcurrentLinkedQueue; impo . . . '' : Typed v
ariable declaration


Автор: Sadness 18.10.2009, 21:11
Ты наверное задал не верный путь к директории с файлами, замени /path/folder на свой путь. Также если в директории не будет файлов вылетит IllegalArgumentException.

Автор: jone31 18.10.2009, 21:23
Цитата(Sadness @  18.10.2009,  21:11 Найти цитируемый пост)
Ты наверное задал не верный путь к директории с файлами, замени /path/folder на свой путь. Также если в директории не будет файлов вылетит IllegalArgumentException.

не, с путями все вроде правильно.

Добавлено через 13 секунд
и файлы тоже в папке есть. 

Автор: Sadness 18.10.2009, 22:05
У тебя в логах куча ошибок явно не из моего класса smile
Возьми отдельно создай файл Main.java скопируй туда мой класс, скомпилируй и запусти из консоли smile и добавь в коде вывод переменных count и number чтоб убедиться что корректно отработало.

Автор: jone31 19.10.2009, 16:35
я уже разобрался. Спасиб все работает

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)