2014-01-10 42 views
0

我无法在应用程序中将int值写入文件。当我写入字符串文件时,它的表现很好。我使用ObjectOutputStream尝试了int值,但只有一些奇怪的符号(它们中的一些甚至不是一个)继续出现。所以我尝试使用DataOutputStream,但即使这样也行不通。 这里是我的代码片段:Android将int值写入文件

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类型是把一个fight..So谁能帮助我? 在此先感谢!

+1

一个'int'被存储为一个4字节的值,而不是一个十进制表示。 –

+0

我试着把它写成对象或字节......你能告诉我我在哪里试着用十进制表示来写它吗? – user2784307

+0

这就对了,它听起来像是正常工作。你为什么认为有问题?如果您需要整数的字符串表示形式,只需将其转换为字符串即可。但那为什么要使用DataOutputStream? –

回答

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应该更容易。
+0

首先,谢谢..所以我应该写dos.writeBytes(qno.toString())?? .. – user2784307

+0

不,请使用['BufferedWriter'](http://docs.oracle.com/javase/7/docs /api/java/io/BufferedWriter.html) – tilpner

+0

非常感谢你......我现在就试试.. – user2784307