#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); } }
Комментариев нет:
Отправить комментарий