无法将新行写入File

时间:2011-10-28 21:29:11

标签: java android arraylist filereader filewriter

我有一堆字符串,我正在写一个文件:

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

当我打印List时,它看起来像

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 :(得分:0)

编写分数的代码使用

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

这意味着如果使用分数12,100和2调用方法,则文件看起来像

121002

因为你没有写任何分隔符。你想如何正确解析这三个数字?

使用包裹PrintWriter的{​​{1}},并使用其BufferedWriter方法撰写分数。

请注意,通过打开文件逐个写入分数并每次关闭它都不会很快。顺便说一句,使用BufferedWriter只是为了写一个整数将不会获得任何好处。您还有异常处理错误:应始终在finally块中关闭流和读取器/写入器。

答案 1 :(得分:0)

当您编写整数或整数字符串时,您不会在每次输出后添加新的行字符。因此,您的文件只有一行数据,您将获得哪一行作为连续字符串... 要修复,请在单独的write()调用之间添加类似write.newLine()的行分隔符。

答案 2 :(得分:0)

writeScoreToFile函数中,我没有看到任何新行或任何类型的分隔符,这些分隔符会分隔每个正在写入的分数。

在这种情况下,您的文件实际上在一行中包含1009610096100,而getArrayFromFile内的循环只会执行一次:

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

因此,List<String>只包含1个元素,而代码blastScores.get(blastScores.size()-1)将获得最后一个 元素,显然是1009610096100

相关问题