【问题标题】:Unable to write new lines to File无法将新行写入文件
【发布时间】:2011-12-17 14:51:24
【问题描述】:

我有一堆要写入文件的字符串:

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 元素。

我不确定自己做错了什么。

【问题讨论】:

    标签: java android arraylist filereader filewriter


    【解决方案1】:

    写分数的代码使用

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

    这意味着如果使用分数 12、100 和 2 调用方法,您的文件将如下所示

    121002
    

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

    使用包装BufferedWriterPrintWriter,并使用其println 方法写入分数。

    请注意,通过每次打开文件并关闭文件来逐一写入乐谱不会很快。顺便说一句,仅使用 BufferedWriter 写入单个整数不会获得任何好处。您也有糟糕的异常处理:流和读取器/写入器应始终在 finally 块中关闭。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

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

        因此,您的 List&lt;String&gt; 仅包含 1 个元素,而代码 blastScores.get(blastScores.size()-1) 将获得最后一个 only 元素,显然是 1009610096100

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-03-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-07-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多