【问题标题】:How to check if a FileInputStream is "full"如何检查 FileInputStream 是否“已满”
【发布时间】:2012-12-28 15:20:36
【问题描述】:

我正在尝试按照此示例在用户移动设备上编写文件

Storage Options [data-storage]

我想在用户第一次运行我的应用时创建该文件。

在用户第一次运行我的应用程序后,我希望首先读取文件,然后在其中写入一些内容(如果需要)。

按照上面的例子,我使用FileInputStream stream= openFileInput(FILENAME)

有没有办法通过检查 fileInputStream 本身来知道我放入 FileInputStream 的文件是否存在?

【问题讨论】:

  • 我想说,如果你可以从中读取,你可以放心地假设它存在,但如果它不存在,你就无法打开它,这意味着你必须捕获 FileNotFoundException
  • 在旁注中,您为什么不使用首选项来存储您的应用程序特定数据?这是一种“记住”应用程序信息的标准方式,而不是使用 SD 卡中的文件。另外,当用户更改/移除他的 SD 卡时会发生什么?您的应用程序会认为它是第一次启动。是你所期待的吗?
  • @DurairajP : openFileInput 为此上下文打开一个私有文件。它不在 SDCard 上(因为它是私有的)。正如存储选项文章所述,它使用内部存储。

标签: android


【解决方案1】:

我会用

context.fileList();

并测试我的文件是否在某个地方。 (最快的方法是列出它并使用contains()):

Arrays.asList(context.fileList()).contains(FILENAME);

【讨论】:

  • 谢谢你的反对,有人。请详细说明为什么错误是错误的?
【解决方案2】:

感谢大家的帮助。 @Durairaj P 建议做我想做的最好的方法。

我使用了首选项。

但我仍然想知道它是否适合我想做的事情。我想跟踪用户在玩我的游戏时获得的积分;当用户重新打开我的应用程序时,我必须显示他们安装我的应用程序后获得的所有积分。我只是想知道 Preferences 是否适合并适合于此,或者我是否应该使用其他东西。

无论如何我发布我的代码,它可能会帮助某人

public class managePreferences{
Context context;    

    managePreferences(Context context){
        this.context = context;
    }


    public String readPreference(String fieldName, String defaultValue){    
        SharedPreferences prefs = context.getSharedPreferences("MY_PREFERENCES", Context.MODE_PRIVATE);
        String value = prefs.getString(fieldName, defaultValue);
        return value ;
    }


    public void writePreference(String fieldName, String value){
        SharedPreferences prefs = context.getSharedPreferences("MY_PREFERENCES", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = prefs.edit();
        editor.putString(fieldName, value);
        editor.commit();

    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-31
    • 2011-10-30
    • 1970-01-01
    • 2020-03-11
    • 2010-10-24
    • 1970-01-01
    相关资源
    最近更新 更多