我正在开发一个应用程序,创建了一些目录,并通过我的应用程序进行访问,出于安全考虑,我想将这些目录隐藏起来,使用户只能在应用程序内部访问它们,而无法通过文件管理器等方式在应用程序外部访问。欢迎提供任何帮助。
请勿重复回答,因为我已经搜索过所有答案,但没有一个对我有用。
只在文件夹名前添加一个点并不能保护它,只是对用户不可见。它仍然可以从应用程序(包括文件管理器和用户)中访问。它通常被大多数文件管理器默认隐藏。
如果您希望出于安全原因隐藏文件,则应使用Android的内部存储。
根据官方Android开发人员指南:
您可以直接将文件保存在设备的内部存储中。默认情况下,保存到内部存储的文件对您的应用程序是私有的,其他应用程序无法访问它们(用户也无法访问)。当用户卸载您的应用程序时,这些文件将被删除。
示例:
String FILENAME = "hello_file";
String string = "hello world!";
FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
fos.write(string.getBytes());
fos.close();
您还可以加密文件并将加密密钥存储在Android Keystore中。
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);
只需编写目录名称,后跟一个点(.)
.myDir or .myDir1
因此,这些目录在文件管理器中不可见。访问这些目录时,请仅使用点(.)进行调用。 例如:
"/path/to/folder/.myDir/"
文件名也可以这样做
如果您的文件夹名字是MyApplicationFolder,那么您需要在文件夹名字前面加上一个点 (.) 和单词Dot,变成.MyApplicationFolder。
这样创建的文件夹内的图片、视频等文件将会被隐藏,但可以在文件管理器中看到该文件夹。
Context.MODE_PRIVATE
将它们存储在内部存储中,用户不应该能够看到文件,因为他无法打开存储它的目录。 - schrej