当前位置: 首页 > 知识库问答 >
问题:

文件exists()始终返回true,无论发生什么情况

田宇
2023-03-14

我有一个函数,根据给定的文件名在目录中搜索文件。我的问题是,无论发生什么,它总是返回true(文件存在)。

函数如下:

public boolean searchFile(String name) {
    File localStorage = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
    String storagePath = localStorage.getAbsolutePath();
    String rootPath = storagePath + "/App";
    String fileName = "/" + name + fileExtention;
    File root = new File(rootPath);
    if(!root.mkdirs()) {
        Log.i("test", "This path is already exist: " + root.getAbsolutePath());
    }
    File f = new File(rootPath + fileName);
    try {
        if (getActivity() != null) {
            int permissionCheck = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE);
            if (permissionCheck == PackageManager.PERMISSION_GRANTED) {
                if (f.exists()) {
                    Log.i("test", "This file is already exist: " + f.getAbsolutePath());
                    return true;
                }
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return false;
}

这并没有真正意义,因为我读到File f=new File(blah)只创建文件的对象,而实际上并没有在存储中创建文件。

共有1个答案

孙子民
2023-03-14

请在下面找到函数,您可以将其映射到适合您的情况。我正在使用JavaNIO。我还抑制了所有警告@SuppressLint("NewApi")(这不是必须的,抑制了警告即)

Java代码

import android.annotation.SuppressLint;
import android.util.Log;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class FileExistAlwaysReturnsTrue {

    Path path;
    String LOG_TAG = "Files_Log";

    @SuppressLint("NewApi")
    boolean fileExists(String filePath /*Set the file path here*/) {

        /* Sample filePath: /data/data/com.package/cache/WebView/font_unique_name_table.pb */

        try {
            path = Paths.get(filePath);
            if (Files.exists(path)) {
                return true; /* File exists */
            } else {
                return false; /* File does exists */
            }
        } catch (Exception e) {
            Log.d(LOG_TAG, e.getMessage());
        }
        return false;
    }


}

权限

确保您具有以下权限。

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

当做

 类似资料:
  • 问题内容: 这对我完全没有意义。 这是我的代码: 即使我的输出是 我正在用Java执行此操作,并且正在使用Eclipse galileo,因此,每次我编译/运行程序时,它都会将其保存,因此编译器应获取程序的更新版本。这是怎么回事? 问题答案: 一个常见的错误。删除语句末尾的。 顺便说一句,如果我使用方括号,并且使用IDE的代码格式化程序,那么我总是写以下内容。 这意味着如果您放错了位置,或者可能更

  • 问题内容: 我正在尝试使用Qt-Framework连接到sql数据库。 不幸的是,即使没有建立连接,db.open()始终返回true(您可以设置任何密码,主机名等)。我从查询中得出的结论对数据库没有任何影响。 我在Ubuntu 14.04上使用LAMPP。 我有以下代码: 问题答案: 这是解决我的问题的方法。我使用了驱动程序QMYSQL而不是QSQLITE。我只使用了后者,因为无法加载第一个。在

  • 问题内容: 它们没有正确回答(或根本没有回答)。但是,我不知道为什么总是对我返回false。有人可以告诉我为什么以及如何解决问题?提前致谢。 注意:我所说的活动是包含在中的孩子,这都不是 MAIN 或 LAUNCHER 活动。我不知道这有什么区别。 编辑: 因此应用程序不会进入后台。我希望它进入后台,就像按下硬件HOME一样 问题答案: 我不知道为什么要回去给你。也许您的清单上有些奇怪?无论如何,

  • 问题内容: 我已经显示了带有记录和“删除”图像的表格。在删除图像上单击我正在使用ajax删除记录。如果我删除ID = 40的记录,则假定存在三个ID为40、41、42的记录,响应返回“ 1”并删除记录,下一次,如果我再次单击“删除图像”,它将再次返回“ 1”。 codeigniters db-> delete()方法始终返回“ 1”吗?我是否需要手动检查记录是否存在,然后继续删除?以下是我的代码i

  • 问题内容: Google Guava有一个始终返回的谓词。Java 8是否具有类似的功能?我知道我可以使用,但我想要类似的预制产品。 问题答案: Java 8中没有内置的永远为真和永远为假的谓词。最简单的编写方式是 和 比较这些 最后是一个匿名的内部类: Guava具有这些内置谓词的原因可能是静态方法调用比匿名内部类具有巨大的语法优势。在Java 8中,lambda语法非常简洁,以至于写出静态方法

  • 问题内容: 标题是整个问题。有人可以告诉我为什么会这样吗? 问题答案: 是的-因为它确实以空字符串开头。实际上,空字符串在逻辑上在每对字符之间出现。 这样说:你能给“开始于”的什么定义排除这种情况?这是“开始于”的简单定义,它没有: “如果x的前几个字符与y的第一个字符匹配,则x 以y开头。” 替代(等效)定义: “如果“ x以y开头”