如何在安装Android应用程序时在内部存储上创建目录?

时间:2012-12-12 16:36:08

标签: java android directory installation

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

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运行应用程序到手机时都使用内部存储器,它是否会自动删除前一个应用程序及其资源,或者我是否手动执行此操作?

6 个答案:

答案 0 :(得分:16)

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

File myDir = new File(getCacheDir(), "folder");
myDir.mkdir();

答案 1 :(得分:7)

如果您想要存储在外部存储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;
}

答案 2 :(得分:5)

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

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

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

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

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

正如您对问题的评论中所提到的,您真的应该在这里发布错误,以便我们能够为您提供帮助。

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

答案 3 :(得分: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
    }

答案 4 :(得分:0)

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

String path = "";


然后

if (path.isEmpty()) {
        File file = new File(this.getFilesDir(), "my_dir_identfiying_name/");
        path = file.getAbsolutePath();
        Log.d("PATH", path);
    }

答案 5 :(得分:0)

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();