Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android上的文件检查问题_Java_Android_File_Io_Exists - Fatal编程技术网

Java Android上的文件检查问题

Java Android上的文件检查问题,java,android,file,io,exists,Java,Android,File,Io,Exists,我使用File f=new File(s)通过按下按钮创建一个新文件,并保存该文件。然后使用.fileList()/getApplicationContext().fileList()收集“已保存”文件(两者都起作用),并在for循环中用于保存到ArrayList,然后将其传递到ListView的ListAdapter。在适配器中,我设置了一个按钮来删除每个文件。我将日志放在代码的每个部分上,当我按下一个按钮时,各个按钮和文件都会被识别,但在f.exists()处,它总是返回null。即使列表是

我使用File f=new File(s)通过按下按钮创建一个新文件,并保存该文件。然后使用.fileList()/getApplicationContext().fileList()收集“已保存”文件(两者都起作用),并在for循环中用于保存到ArrayList,然后将其传递到ListView的ListAdapter。在适配器中,我设置了一个按钮来删除每个文件。我将日志放在代码的每个部分上,当我按下一个按钮时,各个按钮和文件都会被识别,但在f.exists()处,它总是返回null。即使列表是使用收集的文件创建的(因此文件必须存在),它也始终返回null。为什么会这样?我已经试着调试三天了

要删除的适配器中的代码(适配器中的所有其他内容都有效):

编辑: 试图删除数据目录中的所有文件(由=新文件创建的文件))


这种行为的原因是,
File
只是路径
String
的包装,并根据需要返回信息,如
exists()
。因此,当您创建名为“notexisting”的新
文件时,getName()等仍然有效

调用新文件(“文件名”)时,在文件系统上不会真正创建任何内容。

内存中只有一个对象,然后可以调用file.createNewFile()在指定位置创建空文件


如果您通过
getApplicationContext().fileList()
获取文件,这些文件位于应用程序专用存储中,并且是使用
getApplicationContext().openFileOutput(“fileName”,mode)
创建的,它们的实际路径是这些文件的
/data/data//files/
,不需要
文件
对象。创建、修改或删除。一切都应该通过
上下文
和文件名来处理。

发布你的
适配器
codeposted。仅供参考文件名/listview名称,在整个应用程序中,基本上每个文件名都是静态的。尝试添加一些日志记录,看看getChild(groupPosition,childPosition)。toString()产生了什么,它是正确的文件路径吗?我已经更新了帖子并创建了大量日志记录。可能是我的模拟器吗?我都试过了!!文件在哪里?/new_recipe是否意味着从根目录中删除文件?您是否在设备(或模拟器)上检查文件是否存在于您认为存在的位置?谢谢您的回答,deleteFile()对我不起作用,我已将文件名放入字符串数组中,然后从数组中获取名称并调用方法,但它不想这样做。我需要特殊权限吗?不,您不需要任何权限,因为通过listFiles()只能访问您的私人存储。检查编辑。太好了!是的,我发现这个文件只是一个文件的实例。现在我使用openfileinput和createfile,使用文件和对象输入流来写入数据。非常感谢!
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());
        }
    }
}
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