Страницы

Поиск по вопросам

воскресенье, 12 января 2020 г.

Как лучше работать со строковым файлом в Java

#java


Вопрос в том, что есть файл(обычный .txt), в этом файл имеет вид 10 строк и два столбца
в каждом столбце номера. Необходимо как то работать с эти файлом, а то есть считать
данные и по номеру из первого столбца выводить данные со второго столбца. Как это сделать,
использовать базу данных или sharedPreference или массивы? Подскажите пожалуйста. 
Вид файла который надо считать имеет вид:


000000001 0002
000000002 09809
000000003 0002
000000004 09809
и т.д.  

    


Ответы

Ответ 1



Зачем все так усложнять? final File data = new File("file.txt"); LineNumberReader lnr = new LineNumberReader(new BufferedReader(new FileReader(data))); String line; while((line = lnr.readLine()) != null) { final String args[] = line.split("\t", -1); //parse params args[0], args[1] int id_1 = Integer.parseInt(args[0]); int id_2 = Integer.parseInt(args[1]); }

Ответ 2



Данный пример применим к Android. Может кому интересно будет решение моей проблемы. Я решил, что не буду сохранять данные всего файла в Map, а буду считывать файл в отдельном потоке, как только встречается требуемое значение поток вернет нам значение из второго столбца. Реализовал я все это в отдельном AsyncTask классе. Данный код протестировал, работает быстро и без глюков, количество строк около 2000 тысяч. Создал класс FindKeyAsyncTask данный поток принимает String - искомое значение, и возвращает String - результат. public class FindKeyAsyncTask extends AsyncTask { Context context; public FindKeyAsyncTask(Context context) { super(); this.context = context; } @Override protected String doInBackground(String... params) { final String FILENAME = "data.db"; String result = ""; String str = ""; try { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(context.openFileInput(FILENAME))); while ((str = bufferedReader.readLine()) != null) { String[] array = str.split("\t"); if (array[0].equals(params[0])){ result=array[1]; return result; }else { result = context.getString(R.string.f2_NotFound); } } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return result; } @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected void onPostExecute(String result) { super.onPostExecute(result); FindFragment.tv_amount.setText(result); } }

Комментариев нет:

Отправить комментарий