我正在尝试编写我的第一个Android应用程序。我以前认识Java,但是自从我用它以来已经有一两年了。
我想在内部存储中创建一个简单的文件 - 我知道我不必设置任何权限来创建这样的文件?
即使只是尝试创建基本文件 - 检查文件是否存在然后创建它(如果它不存在)也不起作用。谁能告诉我我做错了什么?
(我已经注释掉了读取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()));}
}
答案 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块中。