在阅读和写入内部存储时遇到问题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"); 

刚开始削减可能使所有的差异。