在阅读和写入内部存储时遇到问题android
我正在为自己编写一个简单的预算应用程序,而且我很难弄清楚如何写入内部存储。我似乎没有正确地写入文件,并且我找不到更深入的示例,比Data Storage article on developer.android.com在阅读和写入内部存储时遇到问题android
基本上,我试图写一个测试浮点到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();
这就是它的要义,任何人看到我做错了什么?
编辑: 感谢您的答复,我继续前进并转换为/从字符串像你建议的,但我仍然不认为该文件正在创建。如果它存在于onResume()中并且它没有运行,那么我有一条if语句可以读取它。 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");
是否存储该内容的内部文件?
所以这不完全是你要求的,但这是我如何使它为字符串工作,并且它可能对你有帮助。 (你可以框primatives和toString他们当然,如果你想使用此代码。)
写作
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和我的代码中的相对路径,然后查看是否返回某个长度的字符串或类似的东西,或者该文件不存在的异常。
如果您真的好奇创建文件的位置,或者想亲眼看到它,我相信您可以通过DDMS中的文件管理器在手机上浏览它。
最后一件事,我建议将try/catch块移到写循环之外。由于它是一个重复的任务,所以不需要这种方法的开销,尽管最大限度地减少try/catch块的大小是一种很好的做法。
真的可以最后一件事,如果你想使用File对象的完整路径,你可能希望有路径如下所示:
File file = new File("/data/data/com.v1nsai.mibudget/balance.txt");
刚开始削减可能使所有的差异。