阅读和写入内部存储android时遇到问题

时间:2010-06-27 01:17:08

标签: android file-io

我正在为自己编写一个简单的预算应用程序,而且我无法弄清楚如何写入内部存储空间。我似乎没有正确地写文件,我找不到比developer.android.com上的Data Storage article更深入的例子

基本上,我正在尝试将测试浮点数写入MyBalance文件,然后将其读取到平衡状态。在我的实际代码中,我在文件输入/输出操作中使用了try / catch语句,但我跳过它们以使代码更具可读性。

float test = 55;
float balance;
byte[] buffer = null;
FileOutputStream fos = openFileOutput( "MyBalance", Context.MODE_PRIVATE );
fos.write(Float.floatToRawIntBits(balance));
fis.read(buffer); //null pointer
ByteBuffer b = ByteBuffer.wrap(buffer);
balance=b.getFloat();

这是它的要点,任何人都能看到我做错了什么?

编辑: 感谢您的回复,我继续按照您的建议转换为/从String,但我仍然认为文件没有被创建。我有一个if语句,如果它存在于onResume()中并且它没有被运行,则从中读取它。 Lemme发布了我的一些代码。

以下是我正在编写文件的方法,(setbal是一个EditText,而balanceview是一个TextView):

 balance = Float.valueOf(setbal.getText().toString());
 balanceview.setText(setbal.getText());
 balstring = String.valueOf(balance);
 for (int i = 0; i < balstring.length(); ++i)
     try {
     fos.write((byte)balstring.charAt(i));
     } catch (IOException e) {
         e.printStackTrace();
     }

我检查文件是否存在于onResume()中,如下所示:

File file = new File("data/data/com.v1nsai.mibudget/balance.txt");

是否存储了该上下文的内部文件?

1 个答案:

答案 0 :(得分:5)

所以这并不是你要求的,但这就是我为Strings工作的方式,你可能会对它有所帮助。 (如果你想使用这段代码,你可以打包灵长类动物并将它们串起来。)

编写

FileOutputStream fos = context.openFileOutput("savedstate.txt", 0);

for (int i = 0; i < out.length(); ++i)
    fos.write((byte)out.charAt(i));

StringBuilder inb = new StringBuilder();

FileInputStream fis = this.mContext.openFileInput("savedstate.txt");

int ch;
while((ch = fis.read()) != -1)
    inb.append((char)ch);

更新

我想到的一个想法是,您可能不希望使用具有手动键入文件的完整路径的File对象。相反,只需将FileInputStream与上下文对象和我的代码中的相对路径一起使用,然后查看是否获得了某个长度的String或类似的东西,或者该文件不存在的异常。

如果您真的好奇文件的创建位置,或者想亲眼看到它,我相信您可以通过DDMS中的文件管理器在手机上浏览它。

最后一件事,我建议将try / catch块移到写入循环之外。由于重复执行相同的任务,因此不需要该方法的开销,尽管通常最好将try / catch块的大小最小化。

确实最后一件事,如果你想将File对象与完整路径一起使用,你可能希望路径如下:

File file = new File("/data/data/com.v1nsai.mibudget/balance.txt");

开头的斜线可能会有所不同。