18

我想要一个文件夹,我将在其中放置我需要的所有资源,并且我希望它在内部存储中。由于我希望这个目录只创建一次,我发现我应该在应用程序的主要活动中创建它:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    File directory = context.getDir("mydir", Context.MODE_PRIVATE);
    Log.d("directory", directory.getAbsolutePath().toString());
} 

这似乎没问题,因为这是我在互联网上能够找到的,但是我收到了大量错误,我可以访问目录路径的日志并且应用程序无法启动。知道为什么吗?

另外,如果我每次将应用程序从 Eclipse 运行到手机时都使用内部存储,它会自动删除前一个及其资源,还是我必须手动删除?

4

6 回答 6

25

使用getCacheDir(). 它返回文件系统上应用程序特定缓存目录的绝对路径。然后你可以创建你的目录

File myDir = new File(getCacheDir(), "folder");
myDir.mkdir();
于 2012-12-12T18:03:53.657 回答
9

如果你想存储在外部存储 SD 卡上,你需要有这个

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

在您的 AndroidManifest.xml 文件中

这也适用于存储:

File direct = new File(Environment.getExternalStorageDirectory()+"/folder");

if(!direct.exists()) {
     if(direct.mkdir()); //directory is created;
}
于 2012-12-12T16:43:22.187 回答
5

首先,请务必阅读并了解可用于您的应用程序的不同存储选项。谷歌在这里有一篇关于这个主题的非常好的文章:

http://developer.android.com/guide/topics/data/data-storage.html

上面 Andy 的回答提到了 Environment.getExternalStorageDirectory()(API 级别 7)用于写入 SD 卡或类似内容,但您应该记住,当用户卸载应用程序时,写入该位置的文件不会被删除。文档说:

“应用程序不应该直接使用这个顶级目录,以免污染用户的根命名空间”

相反,如果您以 API 级别 8 及更高版本为目标,则应使用 Context.getExternalCacheDir(),因为卸载应用程序时该位置的文件将被删除。如果您真的希望文件在卸载后仍然存在,您应该使用 Context.getExternalFilesDir()。还有 getCacheDir() 和 getFilesDir() 用于处理内部存储上的文件。

正如对您的问题的评论中提到的,您确实应该在此处发布错误,以便我们能够为您提供帮助。

PS 我是新来回答关于 SO 的问题,所以我没有足够的代表来发布我的答案中提到的所有功能的链接,而且我似乎无法对以前的帖子发表评论。

于 2012-12-12T17:14:00.147 回答
1

Android studio 在特定文件夹中下载视频:

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

  String path = Environment.getDataDirectory().getAbsolutePath().toString() + "/storage/emulated/0/appFolder";
  File mFolder = new File(path);
  if (!mFolder.exists()) {
      mFolder.mkdir();
  }
  File Directory = new File("/sdcard/kaizzan/");
  Directory.mkdirs();
于 2018-08-22T08:01:22.033 回答
0
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

File newfile = new File(Environment.getExternalStorageDirectory()+"/specifyfoldername","nestedfoldername");
    direct.mkdir();
// it will create two folder in your internal storage first is specifyfoldername and another one inside the mentioned folder which is nestedfoldername
    }
于 2017-04-04T12:49:35.247 回答
0

我认为 Blackbelt 的答案很好,但不想将其存储在内部缓存中(对于我试图制作的规范,它会经常被擦除和写入)所以我所做的是:

String path = "";


进而

if (path.isEmpty()) {
        File file = new File(this.getFilesDir(), "my_dir_identfiying_name/");
        path = file.getAbsolutePath();
        Log.d("PATH", path);
    }
于 2018-02-08T11:13:52.393 回答