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

jam*_*abb 3 file-io android

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

基本上,我正在尝试将测试浮点数写入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();
Run Code Online (Sandbox Code Playgroud)

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

编辑:感谢您的回复,我继续按照您的建议转换为/从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();
     }
Run Code Online (Sandbox Code Playgroud)

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

File file = new File("data/data/com.v1nsai.mibudget/balance.txt");
Run Code Online (Sandbox Code Playgroud)

是存储该上下文的内部文件的位置吗?

Guz*_*zba 5

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

写作

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

for (int i = 0; i < out.length(); ++i)
    fos.write((byte)out.charAt(i));
Run Code Online (Sandbox Code Playgroud)

StringBuilder inb = new StringBuilder();

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

int ch;
while((ch = fis.read()) != -1)
    inb.append((char)ch);
Run Code Online (Sandbox Code Playgroud)

更新

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

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

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

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

File file = new File("/data/data/com.v1nsai.mibudget/balance.txt");
Run Code Online (Sandbox Code Playgroud)

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