我正在为自己编写一个简单的预算应用程序,而且我无法弄清楚如何写入内部存储空间。我似乎没有正确地写文件,我找不到比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");
是否存储了该上下文的内部文件?
答案 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");
开头的斜线可能会有所不同。