【问题标题】:having trouble reading and writing to internal storage android无法读取和写入内部存储android
【发布时间】:2010-06-27 01:17:07
【问题描述】:

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

基本上,我正在尝试将测试浮点数写入 MyBalance 文件,然后将其读入 balance。在我的实际代码中,我在文件输入/输出操作周围使用了 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() 中并且它没有被运行,它会从中读取。让我发布一些我的代码。

这是我编写文件的方式,(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");

这是存储该上下文的内部文件的地方吗?

【问题讨论】:

    标签: android file-io


    【解决方案1】:

    所以这不完全是您所要求的,但这就是我为字符串工作的方式,它可能对您有所帮助。 (如果你想使用这段代码,你当然可以将原始类型和 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");
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-07
      • 2015-04-23
      • 1970-01-01
      • 2013-11-28
      • 1970-01-01
      • 1970-01-01
      • 2012-10-12
      相关资源
      最近更新 更多