Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
Kroshandowski
2 / 2 / 4
Регистрация: 05.04.2013
Сообщений: 234
#1

Как реализовать чтение txt файлов из папки по порядку?

10.11.2014, 16:31. Просмотров 2047. Ответов 24
Метки нет (Все метки)

Здравствуйте!Как реализовать чтение txt файлов из папки по порядку? Т.е. к примеру у меня есть папка1 в папке assets.В этой папке1 находятся 3-4 txt файла. Как мне по нажатию на button читать следующий файл в папке?Каждый раз нжимая на button я буду переходить к чтению следующего файла в папке.

Просто сейчас у меня указано,что нужно читать именно конкретный файл из конкретной папки.А как сделать чтение файлов по порядку или рандомно?

Для начала я просто попробовал отобразить текст файла в textView с помощью getAssets:
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
    TextView myTv;
    String res = "";
   
        myTv = (TextView) findViewById(R.id.textView);
 
        try {
 
            // OPENING THE REQUIRED TEXT FILE
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    getAssets().open("folder1/1.txt")));
 
            String myLine = reader.readLine();
 
            // NOW READING THEM LINE BY LINE UPTO THE END OF FILE
            while (myLine != null) {
                res += myLine + "\n";
                myLine = reader.readLine();
            }
 
            // CLOSE THE FILE AFTER WE HAVE FINISHED READING
            reader.close();
        } catch (IOException e) {
 
            // INFORM USER OF ANY ERROR...
            Toast.makeText(getApplicationContext(),
                    "Error Opening the File !!!", Toast.LENGTH_LONG).show();
        }
 
        // AND FINALLY SHOW THE READ TEXT IN OUR TEXT VIEW
        myTv.setText(res);
 
        }
Заранее спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.11.2014, 16:31
Ответы с готовыми решениями:

Копирование TXT-файлов из одной папки и BMP-файлов из другой папки в папку, в которой находится пакетный файл
Доброго времени суток. У кого есть возможность сообразить какой код мне...

Копирование TXT-файлов из одной папки и BMP-файлов из другой папки в папку, в которой находится пакетный файл
Доброго времени суток. У кого есть возможность сообразить какой код мне...

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

Как реализовать загрузку .txt файлов?
Собственно вопрос

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

24
Sony17
28 / 28 / 10
Регистрация: 24.05.2013
Сообщений: 157
10.11.2014, 23:08 #2
Kroshandowski,

Ну для начала, пробежаться по всей папке и создать коллекцию/массив файлов этой папки.

Java
1
2
3
4
5
6
7
File folder = new File("folderPath");
        ArrayList<File> allFile = new ArrayList<File>();
        // Если это каталог
        if (folder.isDirectory()) {
            for (File f : folder.listFiles()) 
                allFile.add(f);
        }
А дальше уже работать с коллекцией allFile, по индексу получать нужный файл.

Java
1
allFile.get(index);
где index - позиция файла в каталоге
0
Kroshandowski
2 / 2 / 4
Регистрация: 05.04.2013
Сообщений: 234
11.11.2014, 00:59  [ТС] #3
Sony17, Я так понял,что первый метод это типа метод,а второй это вызов. Но как быть с index? Не я должен позицию указывать,а прога на шару выбирать.
0
Sony17
28 / 28 / 10
Регистрация: 24.05.2013
Сообщений: 157
11.11.2014, 10:37 #4
Kroshandowski,

Ну заведите переменную int index = 0 (0 - первый файл в коллекции/каталоге). По нажатию на кнопку увеличивайте счетчик index++ и опять же вызывайте метод get(index), где index будет равен уже 1, ну и т.д.

Если нужно сразу все файлы по порядку считать, то можно и не создавать эту коллекцию, а сразу начать работу с файлом:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
File folder = new File("folderPath");
StringBuilder text = new StringBuilder();
        if (folder.isDirectory()) {
            for (File f : folder.listFiles()) {
                 BufferedReader br = new BufferedReader(new FileReader(f));
                 String line;
 
                 while ((line = br.readLine()) != null) {
                        text.append(line + '\n');
                 }
            }
            Log.d("", text);
        }
0
Kroshandowski
2 / 2 / 4
Регистрация: 05.04.2013
Сообщений: 234
11.11.2014, 14:04  [ТС] #5
Sony17, ругается на
Java
1
Log.d("", text);
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
11.11.2014, 14:22 #6
Kroshandowski, как ругается?
0
Kroshandowski
2 / 2 / 4
Регистрация: 05.04.2013
Сообщений: 234
11.11.2014, 14:34  [ТС] #7
Spelcrawler, Sony17, сдается мне,что моя задумка хреновая...нет толком инфы в нете. Может вообще создать xml в папке values и прописать пути к txt файлам. Назвать все это selector и считывать подряд при каждом нажатии на button.
Нашел пример... тут смена цветов каринки по нажатию на button. Как прописать пути к файлам txt для дальнейшего чтения?
Java
1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/button_pressed_yellow"
          android:state_pressed="true" />
    <item android:drawable="@drawable/button_focused_orange"
          android:state_focused="true" />
    <item android:drawable="@drawable/button_normal_green" />
</selector>
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
12.11.2014, 09:09 #8
Файлы при разработке добавляются? Потом в процессе использования меняются? Что в файлах? Если просто текст - какой длинны примерно?
0
Kroshandowski
2 / 2 / 4
Регистрация: 05.04.2013
Сообщений: 234
12.11.2014, 14:48  [ТС] #9
Spelcrawler, В txt файлах просто текст,который отображается в textView.Нужно при каждом событии клика button'a, отображать в textView содержание следующего файл из папки folder1 и т.д.
Вложение 453431
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
12.11.2014, 14:55 #10
Kroshandowski, а если вместо файлов использовать string.xml? Загнать текст из каждого файла в отдельную строку, создать массив строк, и выбирать случайно из массива.

strings.xml
XML
1
2
3
4
5
6
7
8
<resources>
 
    <string name="str1">str1</string>
    <string name="str2">str2</string>
    <string name="str3">str3</string>
    <string name="str4">str4</string>
 
</resources>
код
Java
1
2
3
4
5
6
7
8
        ArrayList<String> strings = new ArrayList<>();
        
        strings.add(context.getResources().getString(R.string.str1));
        strings.add(context.getResources().getString(R.string.str2));
        strings.add(context.getResources().getString(R.string.str3));
        strings.add(context.getResources().getString(R.string.str4));
        
        String randomString = strings.get(new Random().nextInt(strings.size()));
0
Kroshandowski
2 / 2 / 4
Регистрация: 05.04.2013
Сообщений: 234
12.11.2014, 15:20  [ТС] #11
Spelcrawler, а возможно ли не текст забивать,а адрес к файлу прописать?Просто в txt файле текст великоват для одной строки.
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
12.11.2014, 16:01 #12
Kroshandowski, насколько великоват? Хотя в принципе не важно. Что вы файлы будете хранить, что в string.xml размер приложения не изменится. А работать мой вариант будет быстрее.
0
Kroshandowski
2 / 2 / 4
Регистрация: 05.04.2013
Сообщений: 234
12.11.2014, 16:06  [ТС] #13
Spelcrawler, А как результат вывести в textView?Точнее переменная результата. Что-то типа:
Java
1
myTv.setText(?????);
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
12.11.2014, 16:24 #14
Kroshandowski, насколько великоват? Хотя в принципе не важно. Что вы файлы будете хранить, что в string.xml размер приложения не изменится. А работать мой вариант будет быстрее.
Цитата Сообщение от Spelcrawler Посмотреть сообщение
String randomString = strings.get(new Random().nextInt(strings.size()));
Вот эта строка "randomString" и есть результат. Т.е.
Java
1
myTv.setText(randomString);
0
Kroshandowski
2 / 2 / 4
Регистрация: 05.04.2013
Сообщений: 234
12.11.2014, 16:27  [ТС] #15
Spelcrawler, подчеркивает красным символ <> и еще context
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
12.11.2014, 16:32 #16
Можно такой метод добавить, если требуется несколько раз переназначать текст:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
static ArrayList<String> strings;
    
    public void setRandomTextOnMyTextView(Context context, TextView myTextView){
 
        if(strings == null){
            strings = new ArrayList<String>();
            strings.add(context.getResources().getString(R.string.str1));
            strings.add(context.getResources().getString(R.string.str2));
            strings.add(context.getResources().getString(R.string.str3));
            strings.add(context.getResources().getString(R.string.str4));
        }        
 
        String randomString = strings.get(new Random().nextInt(strings.size()));
        myTextView.setText(randomString);
 
 
    }
Добавлено через 2 минуты
Цитата Сообщение от Kroshandowski Посмотреть сообщение
подчеркивает красным символ <> и еще context
В последнем сообщении <> исправил. В качестве context в метод передавайте активити т.е. если вызвать метод в onCreate() - будет выглядеть так:
Java
1
setRandomTextOnMyTextView(this, myTextView);
0
Kroshandowski
2 / 2 / 4
Регистрация: 05.04.2013
Сообщений: 234
12.11.2014, 16:55  [ТС] #17
Spelcrawler, подчеркивает строку
Java
1
(Context context, TextView myTextView)
Меняю на
Java
1
(this, myTextView)
Все равно чет не нравится.
Метод вызываю в onCreate()
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        static ArrayList<String> strings; //ТУТ ЕЩЕ НА static ругается    
        public void setRandomTextOnMyTextView(this, myTextView){
 
        if(strings == null){
            strings = new ArrayList<String>();
            strings.add(this.getResources().getString(R.string.str1));
            strings.add(this.getResources().getString(R.string.str2));
            strings.add(this.getResources().getString(R.string.str3));
            strings.add(this.getResources().getString(R.string.str4));
        }        
 
        String randomString = strings.get(new Random().nextInt(strings.size()));
        myTextView.setText(randomString);
 
 
    }
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
12.11.2014, 17:04 #18
Метод то вы отдельно выносите. В onCreate() его вызвать нужно.

Добавлено через 49 секунд
Цитата Сообщение от Kroshandowski Посмотреть сообщение
static ArrayList<String> strings; //ТУТ ЕЩЕ НА static ругается
Это должно быть в теле класса активити(в самом верху до onCreate).
0
Kroshandowski
2 / 2 / 4
Регистрация: 05.04.2013
Сообщений: 234
12.11.2014, 17:30  [ТС] #19
Spelcrawler, со static теперь норм. Все равно почеркивает
Java
1
(this, myTextView)
Хотя наверху я указал что
Java
1
TextView myTextView;
И this подчеркивает
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
12.11.2014, 17:39 #20
Лучший ответ Сообщение было отмечено Kroshandowski как решение

Решение

Цитата Сообщение от Kroshandowski Посмотреть сообщение
static ArrayList<String> strings; //ТУТ ЕЩЕ НА static ругается
Это должно быть в теле класса активити(в самом верху до onCreate).
Цитата Сообщение от Kroshandowski Посмотреть сообщение
public void setRandomTextOnMyTextView(this, myTextView){
Ну конечно это объявление метода там нужно (Context context, TextView myTextView);

Добавлено через 3 минуты
Вот так должна выглядеть активити:
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
static ArrayList<String> strings;
    
    onCreate(){
 
//Тут то что в onCreate() было ДО изменений которые я советовал.
        setRandomTextOnMyTextView(this, myTextView);
 
    }
 
 
    public void setRandomTextOnMyTextView(Context context, TextView myTextView){
 
        if(strings == null){
            strings = new ArrayList<String>();
            strings.add(context.getResources().getString(R.string.str1));
            strings.add(context.getResources().getString(R.string.str2));
            strings.add(context.getResources().getString(R.string.str3));
            strings.add(context.getResources().getString(R.string.str4));
        }
 
        String randomString = strings.get(new Random().nextInt(strings.size()));
        myTextView.setText(randomString);
 
 
    }
2
12.11.2014, 17:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.11.2014, 17:39

Как правильно реализовать чтение папок и файлов?
Всем привет у меня есть папка mydir, в папке есть 3 подпапки (mydir1, mydir2,...

Обработка всех txt-файлов из папки
Была сделана обработка файла, который выбирается в диалоговом окне: private...

Копирование файлов с папки в папку и запись в txt
Добрый вечер, помогите сделать батник чтоб: - С папки HP копировались все...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru