我使用 File f = new File(s) 通过按下按钮创建一个新文件,并保存该文件。然后使用 .fileList()/getApplicationContext().fileList()(两者都有效)收集“保存”的文件,并在 for 循环中使用以保存到 ArrayList,然后将其传递给 ListView 的 ListAdapter。在适配器中,我设置了一个按钮来删除每个文件。我将日志放在代码的每个部分,当我按下一个按钮时,各个按钮和文件都会被识别,但在 f.exists() 中它总是返回 null。即使列表是使用收集的文件创建的,因此文件必须存在,它也始终返回 null。为什么是这样?我已经尝试调试 3 天了!
要从适配器中删除的代码(适配器中的其他所有内容均有效):
public void onClick(View v) {
try {
File f = new File(getChild(groupPosition, childPosition).toString());
if (f.getAbsoluteFile().exists()) {
f.delete();
Log.d("delete", f.getAbsolutePath().toString() + " is deleted!");
} else {
Log.d("delete", f.getAbsolutePath().toString() + ": doesn't exist?");
}
} catch (Exception e) {
e.printStackTrace();
}
}
编辑: 试图删除数据目录中的所有文件(由=新文件创建的文件)
String [] filenames = getApplicationContext().fileList();
if (filenames.length > 0) {
for (int i = 0; i < filenames.length; i++) {
File f = new File(filenames[i]);
Log.d("file selected:", f.getName());
Log.d("file path:", f.getAbsolutePath().toString());
if (f.exists()) {
if (f.delete()) {
Log.d("deleted:", f.getName());
} else {
Log.d("couldn't delete:", f.getName());
}
} else {
Log.d("doesn't exist:", f.getName());
}
}
}
在堆栈跟踪中进行此操作:(+10 个其他)
12-16 21:31:11.187: D/file selected:(1270): new_recipe
12-16 21:31:11.187: D/file path:(1270): /new_recipe
12-16 21:31:11.187: D/doesn't exist:(1270): new_recipe
12-16 21:31:11.197: D/file selected:(1270): Untitled_Recipe
12-16 21:31:11.197: D/file path:(1270): /Untitled_Recipe
12-16 21:31:11.197: D/doesn't exist:(1270): Untitled_Recipe
12-16 21:31:11.197: D/file selected:(1270): hgk
12-16 21:31:11.197: D/file path:(1270): /hgk
12-16 21:31:11.197: D/doesn't exist:(1270): hgk
啊啊啊!
最佳答案
这种行为的原因是,File
只是路径的包装 String
并按需返回信息,例如 exists()
.所以当你创建新的 File
名称为“不存在”的 getName() 等仍然有效。
当您调用 new File("fileName") 时,实际上并没有在文件系统上创建任何内容,
只有内存中的对象,然后你可以调用 file.createNewFile() 在指定位置创建空文件。
如果您通过 getApplicationContext().fileList()
获取文件这些文件在您的应用程序私有(private)存储中,并且是使用 getApplicationContext().openFileOutput("fileName", mode)
创建的,他们的真实路径是/data/data/<your package name>/files/<filename>.
对于这些文件没有 File
需要对象。创建、修改或删除。一切都应该通过 Context
处理和文件名。
关于java - 在 Android 上检查文件的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20611081/