Android文件IO接口类

lin*_*sek 1 java file-io android

我对文件IO的API做了一些阅读,并阅读了以下博客文章:http://techknock.blogspot.com/2008/05/file-hadling-in-android.html.当一切都在同一个活动中时,他的代码工作正常.但我要做的是创建一个IOInterface类,我可以用它来打开多个数据库来填充多个列表.

ListA.java

public class ListA
{
    public List<ClassA> list;
    private final String DBA = "dbA";
    private IOInterface database;

    public List()
    {
        list = new ArrayList<ClassA>();
        database = new IOInterface();
    }

    ...

    public void initListA() throws IOException
    {
        database.openForWriting(DBA);

        String myStr = new String("content");
        database.dos.writeBytes(myStr);
        database.dos.flush();
        database.dos.close();
    }
}
Run Code Online (Sandbox Code Playgroud)

IOInterface.java

public class IOInterface
{
    public DataOutputStream dos;
    private FileOutputStream fos;

    public void openForWriting(String database)
    {
        try {
            fos = openFileOutput(database, Content.MODE_PRIVATE);
            dos = new DataOutputStream(fos);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Eclipse强调fos = openFileOutput(database, Content.MODE_PRIVATE);.随着评论openFileOutput()不存在.解决方法是将IOInteface类扩展为Activity.我想那时openFileOutput()是一个活动类的方法.

所以我的问题是如何完成我想做的事情?标准Java文件io,例如:

File fp = new File("database");
FileOutputStream fos = new FileOutputStream(fp);
Run Code Online (Sandbox Code Playgroud)

不起作用.它捕获FileNotFoundException.但这必须是可行的.有任何想法吗?

谢谢,

Mic*_*ael 5

方法openFileOutput()包含在Context类中,因此您可以将此类的实例传递给打开文件的方法.你应该总是使用方法Context何时处理文件的方法.

您可以阅读开发指南中有关使用内部和外部存储的信息.

  • @njozwiak:`Context`是一个公共抽象类.它无法直接实例化.`Activity`是`Context`的间接子类.有2个中间类 - "ContextWrapper"和"ContextThemeWrapper".所有`Context`后代都有`openFileInput()`.因此,要调用`openFileInput()`,您需要一个非抽象的`Context`实例(抽象类不能实例化),而`Activity`是一个合适的选择.你也可以在`Application`或`Service`中使用`openFileInput()`,因为它们也是`Context`子类. (3认同)