在安卓系统中如何创建隐藏文件夹?

7
我正在开发一个应用程序,创建了一些目录,并通过我的应用程序进行访问,出于安全考虑,我想将这些目录隐藏起来,使用户只能在应用程序内部访问它们,而无法通过文件管理器等方式在应用程序外部访问。欢迎提供任何帮助。 请勿重复回答,因为我已经搜索过所有答案,但没有一个对我有用。
4个回答

5

只在文件夹名前添加一个点并不能保护它,只是对用户不可见。它仍然可以从应用程序(包括文件管理器和用户)中访问。它通常被大多数文件管理器默认隐藏。

如果您希望出于安全原因隐藏文件,则应使用Android的内部存储。

根据官方Android开发人员指南:

您可以直接将文件保存在设备的内部存储中。默认情况下,保存到内部存储的文件对您的应用程序是私有的,其他应用程序无法访问它们(用户也无法访问)。当用户卸载您的应用程序时,这些文件将被删除。

示例:

String FILENAME = "hello_file";
String string = "hello world!";

FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
fos.write(string.getBytes());
fos.close();

Android开发人员指南


您还可以加密文件并将加密密钥存储在Android Keystore中。

这里 是一个关于在Android中加密文件的好答案。
官方指南 关于Android Keystore。


谢谢您的回复。我能否使我的文件在用户尝试在应用程序之外访问它们时无法访问,以便用户无法在应用程序之外看到它们?这是否可能? - Abhishek Bhardwaj
如果您使用Context.MODE_PRIVATE将它们存储在内部存储中,用户不应该能够看到文件,因为他无法打开存储它的目录。 - schrej

3
您想要创建一个目录或文件夹,该目录或文件夹不可被其他应用程序访问(即您的应用程序文件夹),请明确表述。对于第二个解决方案,可以在任何位置创建文件夹,但它需要隐藏。
第一种解决方案是 -
public static File saveFileInAppDirectory(Context context,byte[] inpute, String directoryName,String fileName){
        File mypath;
        File directory = new File(context.getExternalFilesDir(
                Environment.DIRECTORY_PICTURES), directoryName);
        if (!directory.mkdirs()) {
            directory.mkdir();
        }
        mypath = new File(directory, fileName);
        try {
            InputStream is = new ByteArrayInputStream(inpute);
            FileOutputStream f = new FileOutputStream(mypath);
            byte[] buffer = new byte[1024];
            int len1 = 0;
            while ((len1 = is.read(buffer)) > 0) {
                f.write(buffer, 0, len1);
            }
            f.close();

        } catch (Exception e) {
            Log.e("SAVE_IMAGE", e.getMessage(), e);
            e.printStackTrace();
        }

        return mypath;
    } 

它将创建您的应用程序文件夹路径的目录 - Android/Data/Data/Your.Package.Name/FolderName/FileName

对于第二种解决方案 - 只需更改文件名

File mypath = new File(directory, "."+fileName);

如果您想同时实现两者,则只需替换

new File(directory, fileName); with  new File(directory, "."+fileName);

2

只需编写目录名称,后跟一个点(.)

.myDir or .myDir1

因此,这些目录在文件管理器中不可见。访问这些目录时,请仅使用点(.)进行调用。 例如:

"/path/to/folder/.myDir/"

文件名也可以这样做


发布你的代码或检查你的设备中是否选中了“显示隐藏文件”,如果选中了,请取消选中。 - knownUnknown

1
在安卓系统中隐藏文件夹的方法如下:

如果您的文件夹名字是MyApplicationFolder,那么您需要在文件夹名字前面加上一个点 (.) 和单词Dot,变成.MyApplicationFolder

这样创建的文件夹内的图片、视频等文件将会被隐藏,但可以在文件管理器中看到该文件夹。


我该如何使其在任何地方都隐藏,只在应用程序中可见。 - Abhishek Bhardwaj
实际上你不能这样做,但是你可以将你的文件夹位置设置为其他人无法理解的方式,例如:app/xyz/local/example... 就像这样。 - Amjad Khan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接