Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
lifeforce
63 / 56 / 10
Регистрация: 27.09.2010
Сообщений: 480
#1

Как при нажатии на кнопку прочитать определенную строку в текстовом файле? - Android

29.06.2015, 21:03. Просмотров 417. Ответов 10
Метки нет (Все метки)

Всем привет
мне надо по нажатию на кнопку прочитать файл на СД и записать в стринг с определенной строки.
допустим мне нужна строка 3 в которой значение 37





вот пример текста на СД

Не по теме:


Версия базы
37
Версия Карты (географическая)
37
Версия карты (спутниковая)
21
Дата актуализации
28.06.2015




Java
1
2
3
4
5
6
    // получаем путь к SD
    File sdPath = Environment.getExternalStorageDirectory();
    // добавляем свой каталог к пути
    sdPath = new File(sdPath.getAbsolutePath() + "/" + DIR_SD);
    // формируем объект File, который содержит путь к файлу
    File sdFile = new File(sdPath, FILENAME_SD);
что то вроде того но у меня не получается прочитать
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.06.2015, 21:03     Как при нажатии на кнопку прочитать определенную строку в текстовом файле?
Посмотрите здесь:

Android Изменить видимость всех CheckBox-ов при нажатии на кнопку
Android Обновление данных Activity при нажатии на кнопку
Android Сброс всех данных при нажатии на кнопку
Android Смена темы ActionBar при нажатии на кнопку
При нажатии на кнопку следующий @string/xxxx Android
Скриншот гугл карты при нажатии на кнопку Android
Android При нажатии на кнопку приложение закрывается
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ThePlague
100 / 100 / 61
Регистрация: 30.06.2015
Сообщений: 271
30.06.2015, 03:16     Как при нажатии на кнопку прочитать определенную строку в текстовом файле? #2
Ну как-то так:

Для маленького размера файла:

Java
1
String your_line = Files.readAllLines(Paths.get("твой_файл.txt")).get(номер_строки)
Для большого размера файла:

Java
1
2
3
4
try (Stream<String> lines = Files.lines(Paths.get("твой_файл.txt"))) 
{
    your_line = lines.skip(номер_строки).findFirst().get());
}

З.Ы: Это при условии что с доступом к файлу проблем нет.
Паблито
2012 / 1754 / 545
Регистрация: 12.05.2014
Сообщений: 6,208
Завершенные тесты: 1
30.06.2015, 08:49     Как при нажатии на кнопку прочитать определенную строку в текстовом файле? #3
Врятли стримы станут работать под андроид.
lifeforce
63 / 56 / 10
Регистрация: 27.09.2010
Сообщений: 480
30.06.2015, 19:53  [ТС]     Как при нажатии на кнопку прочитать определенную строку в текстовом файле? #4
ThePlague,
ничего не работает.
уже два дня рою просторы интернета , нет никаких примеров.
Паблито
2012 / 1754 / 545
Регистрация: 12.05.2014
Сообщений: 6,208
Завершенные тесты: 1
30.06.2015, 20:06     Как при нажатии на кнопку прочитать определенную строку в текстовом файле? #5
- получаем полный путь к файлу
- читаем построчно весь файл
- изменяем нужную строку
- пишем построчно в файл
- profit

по каждому пункту 100% есть примеры на форуме
lifeforce
63 / 56 / 10
Регистрация: 27.09.2010
Сообщений: 480
30.06.2015, 22:47  [ТС]     Как при нажатии на кнопку прочитать определенную строку в текстовом файле? #6
Паблито,
Цитата Сообщение от Паблито Посмотреть сообщение
по каждому пункту 100% есть примеры на форуме
такие ответы и я могу писать.
и вот мое сообщение выше.
Цитата Сообщение от lifeforce Посмотреть сообщение
уже два дня рою просторы интернета , нет никаких примеров.
это значит что не нашел!
мне надо
Цитата Сообщение от Паблито Посмотреть сообщение
- читаем построчно весь файл
в какой нить стринг, а там уже читаю строки которые мне надо.

C++
1
2
3
4
TStringList *sds=new TStringList;
sds->LoadFromFile(Ndirektoria+"NameBase.name");
String versionA = sds->Strings[1];
String versionB = sds->Strings[3];
Паблито
2012 / 1754 / 545
Регистрация: 12.05.2014
Сообщений: 6,208
Завершенные тесты: 1
30.06.2015, 23:13     Как при нажатии на кнопку прочитать определенную строку в текстовом файле? #7
Цитата Сообщение от lifeforce Посмотреть сообщение
ничего не работает.
такие ответы я тоже могу писать, ни кода, ни ошибок - ничего

Цитата Сообщение от lifeforce Посмотреть сообщение
это значит что не нашел!
ага..или не искал
lifeforce
63 / 56 / 10
Регистрация: 27.09.2010
Сообщений: 480
30.06.2015, 23:40  [ТС]     Как при нажатии на кнопку прочитать определенную строку в текстовом файле? #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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
public class MainActivity extends Activity {
    //private String TAG = "download";
   // private static final String LOG_TAG = ;
    //private TextView textView;
    DownloadManager downloadManager;
    String downloadFileUrlMap = "http://....";
    String downloadFileUrlSat = "http://.....";
    String downloadFileUrlAbonat = "http://.....";
    String downloadFileUrlVer = "http://.....";
    private long myDownloadReference;
    private BroadcastReceiver receiverDownloadComplete;
    private BroadcastReceiver receiverNotificationClicked;
 
    private int GeoCounter;
    private int SatCounter;
    private int AbonatCounter;
 
 
    //
    public static final String APP_PREFERENCES = "mamanrsettings";
    public static final String APP_PREFERENCES_COUNTER = "counter";
    private SharedPreferences GeoSettings;
    private SharedPreferences SatSettings;
    private SharedPreferences AbonatSettings;
    private SharedPreferences mSettings;
 
 
 
 
    //
//==================================================================================================
/*
        String str = "";
        File sdPath = Environment.getExternalStorageDirectory();
 
        sdPath = new File(sdPath.getAbsolutePath() + "//Download//newVD.nv");
 
        File sdFile = new File(sdPath, "newVD.nv");
        try {
            BufferedReader br = new BufferedReader(new FileReader(sdFile));
            Toast.makeText(MainActivity.this,
                    (CharSequence) sdPath,
                    Toast.LENGTH_LONG).show();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    */
    // Toast myToast = Toast.makeText (MainActivity.this, "uuuu",Toast.LENGTH_LONG).show();
//==================================================================================================
//
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
 
 
 
 
        mSettings = getSharedPreferences(APP_PREFERENCES, Context.MODE_PRIVATE);
 
        Button buttonCheckNetwork = (Button) findViewById(R.id.button2);
        buttonCheckNetwork.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ConnectivityManager conManager = (ConnectivityManager)
                        getSystemService(Context.CONNECTIVITY_SERVICE);
                NetworkInfo activeNetwork = conManager.getActiveNetworkInfo();
                boolean isConnected = activeNetwork != null
                        && activeNetwork.isConnectedOrConnecting();
 
                if (isConnected)
                {
                    boolean isWiFi = activeNetwork.getType() == conManager.TYPE_WIFI;
                    boolean isMobile = activeNetwork.getType() == conManager.TYPE_MOBILE;
                    if (isWiFi) {
                        Toast.makeText(MainActivity.this, "Connected via WiFi",
                                Toast.LENGTH_SHORT).show();
                    } else if (isMobile) {
                        Toast.makeText(MainActivity.this, "Connected via Mobile",
                                Toast.LENGTH_SHORT).show();
                    }
//--------------------
                    // take folder SD //
                    File sdPath = Environment.getExternalStorageDirectory();
                    sdPath = new File(sdPath.getAbsolutePath() + "//Download//newVD.nv");//
 
                    // sdFile = new File(sdPath, "newVD.nv");
                    //BufferedReader br = new BufferedReader(new FileReader(sdFile));
                    //String str = br.readLine(getString(3));
                //    try {
                //        BufferedReader br = new BufferedReader(new FileReader(sdPath));
 
                //        String line;
                //        line = br.readLine(3);
                //    } catch (FileNotFoundException e) {
                //        e.printStackTrace();
                //    }
//text.setText("ttyyyy\nkkkjkj\niuiu\njhjhjh");
 
                    sdPath.delete();
                    Uri uri = Uri.parse(downloadFileUrlVer);
                    DownloadManager.Request request = new DownloadManager.Request(uri);
 
//                set the notification
                    request.setDescription("Version")
                            .setTitle("Basa ver");
 
//                set the path to where to save the file
//                      save in app package directory
//                request.setDestinationInExternalFilesDir(MainActivity.this,
//                        Environment.DIRECTORY_DOWNLOADS, "Karta_rajona NODE map.jpg");
//                      save in the public downloads folder
                    request.setDestinationInExternalPublicDir(Environment.
                            DIRECTORY_DOWNLOADS, "newVD.nv");
 
//                make file visible by and manageable by system's download app
                    request.setVisibleInDownloadsUi(false);
 
//                select which network, etc
                    request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI
                            | DownloadManager.Request.NETWORK_MOBILE);
//                  queue the download
                    myDownloadReference = downloadManager.enqueue(request);
 
//button.setEnabled(false);
 
//--------------------
                }
                else {
                    Toast.makeText(MainActivity.this, "No Connection",
                            Toast.LENGTH_SHORT).show();
                }
            }
        });
 
        downloadManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
//--------------------------------------------------------------------------------------------------
думаю что здесь в этой части надо составить стринги для дальнейшего анализа и сравнения версий
буду благодарен за помощь
ThePlague
100 / 100 / 61
Регистрация: 30.06.2015
Сообщений: 271
01.07.2015, 14:25     Как при нажатии на кнопку прочитать определенную строку в текстовом файле? #9
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Вот еще раз подробно как сохранить содержание файла в строку:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
File sdcard = Environment.getExternalStorageDirectory();
File file = new File(sdcard,"file.txt");
StringBuilder text = new StringBuilder();
 
try 
{
    BufferedReader br = new BufferedReader(new FileReader(file));
    String line;
    while ((line = br.readLine()) != null) 
    {
        text.append(line);
        text.append('\n');
    }
    br.close();
}
catch (IOException e) 
{
    //Ошибка!!!
}
Вот у тебя получается все содержимое файла в строке "text".

Теперь пишем что-то вроде этого:

Java
1
String lines[] = text.split("\\r?\\n"); // Делим текст построчно и записываем в массив.
Нужная тебе строка будет находиться в третьем элементе массива(lines[2]).

Вроде все доступно разжёвано.
lifeforce
63 / 56 / 10
Регистрация: 27.09.2010
Сообщений: 480
01.07.2015, 21:37  [ТС]     Как при нажатии на кнопку прочитать определенную строку в текстовом файле? #10
ThePlague,
Спасибо за материал. сейчас на практике буду реализовать.

Добавлено через 1 час 5 минут
ThePlague,
здесь проблема //String[] lines = text.split("\\r?\\n");


а так все работает.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
File file = new File(String.valueOf(sdPath));//;//sdcard,"//Download//newVD.nv"
                   // StringBuilder text = new StringBuilder();
 
                    try
                    {
                        BufferedReader br = new BufferedReader(new FileReader(file));
                        String line;
                        while ((line = br.readLine()) != null)
                        {
                            text.append(line);
                            text.append('\n');
                        }
                        br.close();
                    }
                    catch (IOException e)
                    {
                        //Если Ошибка!!!
                    }
 
 //                 String lines[] = text.split("\\r?\\n"); //  здесь cannot resolve split (java.lang.String)  
Toast.makeText(MainActivity.this, text,
                                Toast.LENGTH_SHORT).show();
Добавлено через 2 часа 14 минут
ThePlague,
так и не разобрался с String lines[] = text.split("\\r?\\n"); // здесь cannot resolve split (java.lang.String)
проблема синтаксиса split
но решил по другому и даже неплохо получилось.
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
void readver()
{
//--------------------------------------------------------------------------------------------------
    // take folder SD //
    File sdPath = Environment.getExternalStorageDirectory();
    sdPath = new File(sdPath.getAbsolutePath() + "//Download//newVD.nv");//
    File file = new File(String.valueOf(sdPath));//
    StringBuilder text = new StringBuilder();
    try
    {
        BufferedReader br = new BufferedReader(new FileReader(file));
        String line;
        int a =0;
        while ((line = br.readLine()) != null)
        {
            a++;
            if(a==4) {
                GeoV=line;
                Toast.makeText(MainActivity.this, GeoV,Toast.LENGTH_SHORT).show();
            }
            if(a==6) {
                SatV=line;
                Toast.makeText(MainActivity.this, SatV,Toast.LENGTH_SHORT).show();
            }
            if(a==8) {
                AbnV=line;
                Toast.makeText(MainActivity.this, AbnV,Toast.LENGTH_SHORT).show();
            }
            //text.append(line);
            //text.append('\n');
        }
        br.close();
    }   catch (IOException e) { }//Errors
    
    //Toast.makeText(MainActivity.this, text,Toast.LENGTH_SHORT).show();
//--------------------------------------------------------------------------------------------------
}
ThePlague, Огромное тебе спасибо за оказанную помощь
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2015, 00:46     Как при нажатии на кнопку прочитать определенную строку в текстовом файле?
Еще ссылки по теме:

Вылетает приложение при нажатии на кнопку Android
Android Фрагменты: приложение вылетает при 4-ом нажатии на кнопку
Убрать стандартный звук при нажатии на кнопку Android
Android Закрыть приложение при нажатии на кнопку
Переключение между экранами при нажатии на кнопку Android

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

Или воспользуйтесь поиском по форуму:
ThePlague
100 / 100 / 61
Регистрация: 30.06.2015
Сообщений: 271
02.07.2015, 00:46     Как при нажатии на кнопку прочитать определенную строку в текстовом файле? #11
lifeforce, всегда рад помочь!
Yandex
Объявления
02.07.2015, 00:46     Как при нажатии на кнопку прочитать определенную строку в текстовом файле?
Ответ Создать тему
Опции темы

Текущее время: 05:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru