Android将int值写入文件

时间:2014-01-10 17:43:37

标签: android int fileoutputstream

我在将app值写入应用程序中的文件时遇到问题。当我将字符串写入文件时,它做得很好。我使用ObjectOutputStream尝试了int值,但只有一些奇怪的符号(其中一组甚至不是一个)不断出现。所以我也尝试使用DataOutputStream,但即使这样也行不通。 这是我的代码片段:

myExternalFile = new File(getExternalFilesDir(filepath), filename);    
FileOutputStream fos = new FileOutputStream(myExternalFile,true);
DataOutputStream dos = new DataOutputStream(fos);

private boolean checkAnswer() 
{
    EditText edit = (EditText) findViewById(R.id.feditText);
    String answer = edit.getText().toString();
    if(answer.equals(""))
    {
        Toast.makeText(this, "Enter solution before moving on to next", Toast.LENGTH_SHORT).show();
        return false;
    }
    try
    {
        int qno = f.getQno();
        //ObjectOutputStream oos = new ObjectOutputStream(fos);
            //oos.writeObject(new Integer(qno));
        dos.writeInt(qno);
        dos.writeBytes(answer);
        dos.writeBytes(eol);//eol line separator already declared 
        dos.close();
    }
    catch (IOException e) {
         e.printStackTrace();
     }

    return true;
}

所以上面代码中的其他所有内容都很好......只有int值才会打架。所以任何人都可以帮助我吗? 在此先感谢!!!

1 个答案:

答案 0 :(得分:2)

DataOutputStream不应该写文本文件。相反,您使用它将标准java原始类型转换为字节,因此可以紧凑地编写它。

这会生成一个二进制文件,您不应该阅读

如果您想阅读它,则必须将数字格式化为文本(例如Integer.toString)。缺点是这可能需要更多的空间,具体取决于价值和基数。

以十进制格式化为2147483647它需要10个字节,而在二进制中它将不断消耗4个字节。请注意,只有三位数的值需要较少的空间。

可以使用DataOutputStream在textform中写入数字:

dos.writeBytes(Integer.toString(yourNumber));

如果你真的想写一个文本文件,你应该使用BufferedWriter

BufferedWriter writer = new BufferedWriter(new FileWriter("out.txt"));
writer.write("Whatever text.");
writer.write(Integer.toString(42));
writer.newLine();
writer.close();

如果你不想解析它,你可能想看看Scanner

然而,从猜测你不想做什么,这可能就是你所需要的。 我想你想要存储类似测验的应用程序的状态,在这种情况下是答案。

有许多更简单的方法可以实现这一目标:

  • Serialization
    • 如果标准不太慢,您可以使用该标准
  • 以二进制文件写入文件
    • 由于原始值的固定长度,使用DataOutputStream
    • 会更容易