我见过的大多数例子都是处理外部内存或者说明如何在内部内存中创建一个新目录而不是如何写入它,我尝试将自己的代码实现到其中,但似乎无法找到创建的文件,即使已创建目录,这是我一直尝试使用的代码:
public void fileCreate(Context context, String fileDir) throws Exception{
File myNewDir = context.getDir(fileDir, Context.MODE_PRIVATE);
if (!myNewDir.exists()){
myNewDir.mkdirs();
File testContnet = new File(myNewDir + "/hello_file.txt");
String hello = "Hello world";
FileOutputStream fos = openFileOutput(testContnet.toString(), Context.MODE_PRIVATE);
fos.write(hello.getBytes());
fos.close();
}
}
现在,当我调用此函数时,我使用:
try {
fileCreate(this, "testerDirectory");
}catch(Exception e) {
e.printStackTrace();
}
没有结果。这只是我正在进行的一个小实验,所以它不是太严重,但我仍然想知道创建目录的正确方法(在这种情况下,一个名为testerDirectory,并将文件保存到它,我相信我的代码是错误的,但我没有太多的经验来确切知道去哪里.Android文档确实向我展示了如何创建和保存文件,尽管在这种情况下我试图将该示例与创建新目录和将文件保存到它。任何帮助/指针将不胜感激。
我也知道在使用adb shell检查目录内容时没有相应地写入文件。
答案 0 :(得分:1)
如果目录尚不存在,您只是将文件写入目录。
将testContnet
的工作移至if
区块之外:
public void fileCreate(Context context, String fileDir) throws Exception{
File myNewDir = context.getDir(fileDir, Context.MODE_PRIVATE);
if (!myNewDir.exists()){
myNewDir.mkdirs();
}
File testContnet = new File(myNewDir, "hello_file.txt");
String hello = "Hello world";
FileOutputStream fos = new FileOutputstream(testContnet);
fos.write(hello.getBytes());
fos.flush();
fos.getFD().sync();
fos.close();
}
这样,如果目录不存在,则创建该目录,然后在任一情况下创建该文件。我还添加了fos.flush()
和fos.getFD().sync()
,以确保在继续之前将所有字节写入磁盘。
更新:您使用的是openFileOutput()
,但未写入所需目录。而且,没有必要。只需在FileOutputStream
上创建File
。