Невозможно записать новые строки в файл - PullRequest
0 голосов
/ 29 октября 2011

У меня есть набор строк, которые я записываю в файл:

private void writeScoreToFile(BlastScore result)
    {
        try{
            FileWriter fstream = new FileWriter(getFilesDir() + CaptureActivity.BLAST_SCORES,true);
            BufferedWriter out = new BufferedWriter(fstream);
            out.write(Integer.toString(result.getBlastScore()));
            out.close();
        }catch (Exception e){
            System.err.println("Write Error: " + e.getMessage());
        }
    }

Я хотел бы прочитать его обратно в виде списка.

private List<String> getArrayFromFile(String filename) throws IOException
    {
        FileReader fileReader = new FileReader(getFilesDir() + filename);
        BufferedReader bufferedReader = new BufferedReader(fileReader);
        List<String> lines = new ArrayList<String>();
        String line = null;
        while ((line = bufferedReader.readLine()) != null) {
            lines.add(line);
        }
        bufferedReader.close();
        return lines;
    }

Списокпишется:

100
96
100
96
100

Когда я печатаю Список, он выглядит так:

10-28 21:22:31.130: I/System.out(936): Last Score: 1009610096100

Вот код, который я использую для его печати:

try {
            List<String> blastScores = getArrayFromFile(CaptureActivity.BLAST_SCORES);
            System.out.println("Last Score: " + blastScores.get(blastScores.size()-1));
        } catch (IOException e) {
            // TODO Auto-generated catch block
            System.err.println("Read Error: " + e.getMessage());
        }

Я пытаюсь получить элемент n-1.

Я не уверен, что делаю не так.

Ответы [ 3 ]

0 голосов
/ 29 октября 2011

Когда вы пишете целые или целочисленные строки, вы не ставите символ новой строки после каждого вывода.Следовательно, ваш файл содержит только одну строку данных, которую вы получаете как непрерывную строку ... Чтобы исправить, добавьте разделитель строк, например write.newLine (), между отдельными вызовами write ().

0 голосов
/ 29 октября 2011

В вашей функции writeScoreToFile я не вижу никакой новой строки или какого-либо разделителя, который бы разделял каждую записываемую партитуру.

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

while ((line = bufferedReader.readLine()) != null) {
   lines.add(line);
}

Следовательно, ваш List<String> содержит только 1 элемент, а код blastScores.get(blastScores.size()-1) получит последний и только элемент, который, очевидно, является 1009610096100.

0 голосов
/ 29 октября 2011

Код, который записывает результаты, использует

out.write(Integer.toString(result.getBlastScore()));

Это означает, что если метод вызывается со счетами 12, 100 и 2, ваш файл будет выглядеть как

121002

, поскольку вы не пишете разделитель. Как вы хотите правильно разобрать это на три числа?

Используйте PrintWriter, который окутывает BufferedWriter, и используйте его метод println, чтобы записать счет.

Обратите внимание, что написание партитур по одному, открывая и закрывая файл каждый раз, будет не очень быстрым. Кстати, использование BufferedWriter только для записи одного целого числа не принесет никакой пользы. У вас также есть плохая обработка исключений: потоки и программы чтения / записи всегда должны быть закрыты в блоке finally.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...