如何将文件写入Android上内部存储的文件夹?

时间:2015-05-07 04:48:42

标签: android file internal-storage

我编写了一个创建文件并将数据写入文件并存储在内部存储中的方法。当我得到文件的绝对路径或路径[我已添加日志消息来试验文件上的操作]时,它显示该文件是在根目录下创建的,它位于/ data / data / mypackagename下/files/filename.txt。不过,我可以在DDMS上找到这些文件夹,在那里我可以找到由我编写的方法创建的文件。但由于我没有权限,我无法打开该文件。

当我查看我的Android设备时,我无法找到这些目录。我查看了堆栈溢出,有些人回答说内部存储中的/ data / data文件夹是隐藏的,要访问它们我必须根据我不想做的设备。

下一步方法:Android设备上有一个名为MyFiles的文件夹[我正在使用运行Android 4.4进行测试的Galaxy Tab 4]。在此文件夹下有设备存储目录,其中包含各种文件夹,如文档,图片,音乐,铃声,Android等等。因此,相机,电子表格应用等应用程序可以将图片写入或保存到图片文件夹中或文件夹中的txt文件。同样,如何将我在函数中创建的文件写入Documents文件夹或可通过设备访问的任何其他文件夹。请帮助我怎么做,感谢任何帮助。

以下是我写的代码:

public void addLog(String power_level){
// creates a logFile in the root directory of the internal storage of the application.
// If the file does not exists, then it is created.
Log.d("AppendPower", "In addLog method");
//File logFile = new File(((Context)this).getFilesDir(), "logFile.txt");
File logFile = new File(getFilesDir(), "logFile.txt");
Log.d("FilesDir Path", getFilesDir().getAbsolutePath());
Log.d("FilesDir Name", getFilesDir().getName());
Log.d("Path on Android", logFile.getPath());
Log.d("Absolute Path on Android", logFile.getAbsolutePath());
Log.d("Parent", logFile.getParent());
if(!logFile.exists()){
    try{
        logFile.createNewFile();
    }catch(IOException io){
        io.printStackTrace();
    }
}
try{
    BufferedWriter writer = new BufferedWriter(new FileWriter(logFile, true));
    writer.write("Battery level reading");
    writer.append(power_level);
    Log.d("Power_Level in try", power_level);
    writer.newLine();
    writer.close();
}catch(IOException e){
    e.printStackTrace();
}

}

3 个答案:

答案 0 :(得分:6)

正如您已经想到在Android中写入 root 目录是不可能的,除非您使用该设备。这就是为什么甚至Play商店中的一些应用程序在安装应用程序之前要求root权限。生根将使您的保修失效,因此如果您没有严格要求,我不建议您这样做。

除根目录外,您可以访问Android文件管理器中可见的任何文件夹。

以下是您可以使用某些数据写入sd的方法 - 摘自:https://stackoverflow.com/a/8152217/830719

使用这些代码,您可以在SDCard中编写文本文件,同时需要在android清单中设置权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

这是代码:

public void generateNoteOnSD(String sFileName, String sBody){
    try
    {
        File root = new File(Environment.getExternalStorageDirectory(), "Notes");
        if (!root.exists()) {
            root.mkdirs();
        }
        File gpxfile = new File(root, sFileName);
        FileWriter writer = new FileWriter(gpxfile);
        writer.append(sBody);
        writer.flush();
        writer.close();
        Toast.makeText(this, "Saved", Toast.LENGTH_SHORT).show();
    }
    catch(IOException e)
    {
         e.printStackTrace();
         importError = e.getMessage();
         iError();
    }
   }  

答案 1 :(得分:1)

1)如果你的目的是调试,你可以写信给/sdcard/。它总能奏效。

2)同样,如果您的目的是调试,您可以尝试在应用程序的目录上设置读取权限。不久之前,它在某些Android设备上适用于我(但至少在一台设备上无法使用)。

答案 2 :(得分:0)

在您的 AndroidManifest.xml 文件中添加此权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

然后使用这个最短的食谱:

try
{
   FileOutputStream fos = 
      openFileOutput("myfile.txt", getApplicationContext().MODE_PRIVATE);
   fos.write("my text".getBytes());
   fos.close();
}
catch (Exception exception)
{
   // Do something, not just logging
}

它将保存在“ /data/data/my.package.name/files/”路径中。