你能在Android中创建一个.dat文件吗?

时间:2014-12-07 15:38:34

标签: android

我正在尝试编写我的第一个Android应用程序。我以前认识Java,但是自从我用它以来已经有一两年了。

我想在内部存储中创建一个简单的文件 - 我知道我不必设置任何权限来创建这样的文件?

  • 如果我想保存ArrayList,它是否需要.dat文件? Android在创建时是否要求我使用文件扩展名?

即使只是尝试创建基本文件 - 检查文件是否存在然后创建它(如果它不存在)也不起作用。谁能告诉我我做错了什么?

(我已经注释掉了读取ArrayList的尝试,因为我甚至无法创建该文件。只是尝试创建基本文件。) (另外,我尝试使用“Shares.dat”代码而不仅仅是“Shares”作为文件名,这也不起作用。我甚至不知道Android是否识别.dat文件并且说实话我不是100确定这是我需要的文件。)

(如果任何人都可以提供帮助,我可能无法在下周末之前测试任何解决方案......)

至于最后一行,最初它是'context.getFileDir()',但是我的类扩展了ActionBarActivity,我在互联网上找到了改变为this.getFileDir()的建议。当我使用context.getFileDir()

时,我得到一个空指针警告
 file = new File("Shares");

if (file.exists()){
    url.setText("File Exists");
    /*try{
    is = openFileInput("Shares");
    oi = new ObjectInputStream(is);
    details = (ArrayList<Action>)oi.readObject();//warning
    oi.close();//need finally??
    }
    catch(Exception e){url.setText((e.getMessage()));}
    url.setText(details.get(0).getAddresse());*/
}
else
{
try
{
            **file = new File(this.getFilesDir(), "Shares");**

}
catch(Exception e){url.setText((e.getMessage()));}
}

1 个答案:

答案 0 :(得分:0)

如果您想要引用在私有存储中创建的文件,您需要使用getFileStreamPath("shares.dat")而不是创建新的File对象。文件扩展名无关紧要,但最好添加文件扩展名以便自己跟踪这些文件的用途。

例如:

private boolean fileExists(Context _context, String _filename) {
    File temp = _context.getFileStreamPath(_filename);
    if(temp == null || !temp.exists()) {
        return false;
    }
    return true;
}

然后,如果您想要写一个名为“shares.dat”的文件,那么您将使用openFileOutput("shares.dat", Context.MODE_PRIVATE)。如果您想从该文件中读入,请使用openFileInput("shares.dat")

// Read in from file
if(fileExists(this, "shares.dat")) {
    FileInputStream fis = this.openFileInput("shares.dat");
    ObjectInputStream ois = new ObjectInputStream(fis);
    ArrayList<Action> actions = (ArrayList<Action>)ois.readObject();
    ois.close();
}

// Write out to file
FileOutputStream fos = this.openFileOutput("shares.dat", Context.MODE_PRIVATE);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(actions);
oos.close();

上面显示的所有流操作都能够抛出IOException,因此请确保根据需要将该代码包装在try / catch块中。