我要求使用Context.MODE_PRIVATE
以嵌套结构编写文件和文件夹。
我发现我们可以使用openFileOutput(FILENAME, Context.MODE_PRIVATE);
创建文件,并且能够使用此方法创建文件。但后来我发现使用此方法我无法创建嵌套文件结构,即
openFileOutput("foo/myText.txt", Context.MODE_PRIVATE);
抛出异常:
java.lang.IllegalArgumentException: File foo/myText.txt contains a path separator
可能是因为它只需要一个fileName & not a filepath
,而且还需要文档
打开与此Context的应用程序包关联的私有文件 写作。
然后我发现getFilesDir()
返回Context的应用程序包,我可以使用普通的Java File I / O创建文件。但我不知道创建它的权限,即它是否{{1 }},MODE_APPEND
,MODE_PRIVATE
或MODE_WORLD_READABLE
。
所以,我有以下问题: -
如何使用MODE_PRIVATE下的openFileOutput()方法创建嵌套文件结构(如果可能的话)?
如果openFileOutput()不适用于创建嵌套结构,那么根据我的要求使用MODE_WORLD_WRITEABLE
和Java File I / O组合是否安全?使用这种方式创建的文件的权限是什么?
答案 0 :(得分:3)
您需要先创建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);
因此您需要将代码编写为
// 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();
}
将foo / myText.txt创建到内部存储区。
对于嵌套目录,您应该使用普通的java方法。喜欢
new File(parentDir, "childDir").mkdir();
如此更新的示例应为
// 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);
答案 1 :(得分:0)
public OutputStream openFile(String absolutePath) throws FileNotFoundException {
File file = new File(absolutePath);
new File(file.getParent()).mkdirs();
return new FileOutputStream(absolutePath);
}
public OutputStream openInternalFile(String relativePath) throws FileNotFoundException {
String rootPath = this.getFilesDir().getPath();
File file = new File(rootPath, relativePath);
return openFile(file.getAbsolutePath());
}
这是我提出的涵盖您的用例的内容。您可以传递absolutePath
或relativePath
。在场景后面它会在内部存储中创建一个嵌套文件夹并返回一个OutputStream
,你可以开始写入它。