我在将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值才会打架。所以任何人都可以帮助我吗? 在此先感谢!!!
答案 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
。
然而,从猜测你不想做什么,这可能就是你所需要的。 我想你想要存储类似测验的应用程序的状态,在这种情况下是答案。
有许多更简单的方法可以实现这一目标:
DataOutputStream
。