Abh*_*nav 4 java file-io android
我有一个要求,其中文件和文件夹需要使用Context.MODE_PRIVATE.
我发现我们可以使用创建文件openFileOutput(FILENAME, Context.MODE_PRIVATE);并且能够使用此方法创建文件。但后来我发现使用此方法我无法创建嵌套文件结构,即
openFileOutput("foo/myText.txt", Context.MODE_PRIVATE);
Run Code Online (Sandbox Code Playgroud)
抛出异常:
java.lang.IllegalArgumentException: File foo/myText.txt contains a path separator
Run Code Online (Sandbox Code Playgroud)
可能是因为它只需要一个fileName & not a filepath并且还有文档说
打开与此 Context 的应用程序包关联的私有文件进行写入。
后来我发现getFilesDir(),返回上下文的应用程序包,我可以通过普通的Java文件创建文件/ O.But我不知道下创建它,即无论是权限MODE_APPEND,MODE_PRIVATE,MODE_WORLD_READABLE或MODE_WORLD_WRITEABLE。
所以,我有以下问题:-
如何使用 MODE_PRIVATE 下的 openFileOutput() 方法创建嵌套文件结构(如果可能)?
如果 openFileOutput() 不适用于创建嵌套结构,那么getFilesDir()根据我的要求使用Java File I/O 组合是否安全?使用这种方式创建的文件的权限是什么?
您需要先创建foo目录,然后在该目录中创建文件。
使用getDir(String name, int mode)在内存中创建目录。方法检索,如果需要,创建一个新目录,应用程序可以在其中放置自己的自定义数据文件。您可以使用返回的 File 对象在此目录中创建和访问文件。
例如
// Create directory into internal memory;
File mydir = context.getDir("mydir", Context.MODE_PRIVATE);
// Get a file myfile within the dir mydir.
File fileWithinMyDir = new File(mydir, "myfile");
// Use the stream as usual to write into the file.
FileOutputStream out = new FileOutputStream(fileWithinMyDir);
Run Code Online (Sandbox Code Playgroud)
所以你需要把你的代码写成
// Create foo directory into internal memory;
File mydir = getDir("foo", Context.MODE_PRIVATE);
// Get a file myText.txt within the dir foo.
File fileWithinMyDir = new File(mydir, "myText.txt");
// Use the stream as usual to write into the file.
try {
FileOutputStream out = new FileOutputStream(fileWithinMyDir);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
将 foo/myText.txt 创建到内部存储中。
对于嵌套目录,您应该使用普通的 java 方法。喜欢
new File(parentDir, "childDir").mkdir();
Run Code Online (Sandbox Code Playgroud)
所以更新的例子应该是
// Create directory into internal memory;
File mydir = getDir("mydir", Context.MODE_PRIVATE);
// Create sub-directory mysubdir
File mySubDir = new File(mydir, "mysubdir");
mySubDir.mkdir();
// Get a file myfile within the dir mySubDir.
File fileWithinMyDir = new File(mySubDir, "myfile");
// Use the stream as usual to write into the file.
FileOutputStream out = new FileOutputStream(fileWithinMyDir);
Run Code Online (Sandbox Code Playgroud)