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

How can I write a file to a folder of the internal storage on Android?

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

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

下一个方法: android 设备上有一个名为 MyFiles 的文件夹 [我正在使用 Galaxy Tab 4 运行 Android 4.4 进行测试]。在这个文件夹下有 Device Storage 目录,里面有 Documents、Pictures、Music、Ringtones、Android 等各种文件夹。因此,相机、传播 sheet 等应用程序都能够将图片写入或保存到图片文件夹或文档文件夹中的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();
}

}

1) 如果你的目的是调试,你可以写到/sdcard/。它总是有效。

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

如您所知,写入 Android 中的 root 目录是不可能的,除非您对设备进行 root 操作。这就是为什么甚至 Play 商店中的一些应用程序在安装应用程序之前也会要求 root 权限。 Root 将使您的保修失效,所以如果您没有严格的要求,我不推荐它。

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

以下是如何将一些数据写入 sd - 摘自:

使用这些代码,您可以在 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();
    }
   }  

.

在您的 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/”路径下。