2011-04-03 67 views
60

有人知道如何获取我的应用程序目录的路径吗? (例如/data/data/my.app.lication/获取应用程序目录

目前我正在使用这种方法:myActivity.getFilesDir().getParent();但在我看来,如果有更简单的解决方案,它就像是一种解决方法。另外,副作用是创建不需要的files目录。

澄清:首先 - 谢谢你的回报。我尝试了解是否已经存在这样做的方法,而不是用于其他解决方法。

+0

@MByD:出于好奇,具体是什么,你想干什么?你应该不需要该目录。例如,如果你想使用数据库目录,使用'getDatabasePath()'。或者,如果您希望自己的目录独立于其他任何目录,请使用'getDir()'。 – CommonsWare 2011-04-03 11:56:24

+0

@CommonsWare - 我有一个不在我的控制下的共享对象,它在我的包文件夹下创建了几个文件夹,我需要访问它们。我只是想知道为什么不是某种方法可用的基础文件夹。 – MByD 2011-04-03 12:06:23

+1

@MyByD:告诉谁写了共享对象头部检查。 – CommonsWare 2011-04-03 12:51:56

回答

76
PackageManager m = getPackageManager(); 
String s = getPackageName(); 
PackageInfo p = m.getPackageInfo(s, 0); 
s = p.applicationInfo.dataDir; 

如果关于未捕获NameNotFoundException蚀担心,你可以使用:

PackageManager m = getPackageManager(); 
String s = getPackageName(); 
try { 
    PackageInfo p = m.getPackageInfo(s, 0); 
    s = p.applicationInfo.dataDir; 
} catch (PackageManager.NameNotFoundException e) { 
    Log.w("yourtag", "Error Package name not found ", e); 
} 
+2

虽然我使用不同的解决方案,但我发现你的确很“干净” – MByD 2011-04-29 17:17:22

+2

这会让你获得APK路径,'sourceDir'是一个不幸的错误。 'dataDir'应该是你要找的。 – orip 2011-11-01 12:27:24

+2

它返回应用程序的目录,这是问题的要求。在投票人之前,请尝试正确地阅读问题。 – 2012-02-14 17:04:15

2

如果您尝试访问文件,请尝试使用描述为hereopenFileOutput()openFileInput()方法。它们会自动打开输入/输出流到内存中的指定文件。这允许你完全绕过目录和File对象,这是一个非常干净的解决方案。

+0

谢谢,但实际上我只是想了解是否有一个函数返回我的应用程序目录路径,我使用它很多,我目前的解决方案看起来很丑。 – MByD 2011-04-03 05:31:03

+0

@MByd啊。我很抱歉,这不是你要找的东西! – 2011-04-03 05:36:15

+0

谢谢:) – MByD 2011-04-03 05:39:11

15

我得到这个

String appPath = App.getApp().getApplicationContext().getFilesDir().getAbsolutePath(); 

from here

+1

getFilesDir返回dataDir的子目录 – njzk2 2013-08-22 13:48:23

+7

请花时间阅读您正在回答的问题。 getFilesDir()机制已经被提出,并在问题本身中被拒绝为不可取的。另外,正如njzk2所指出的那样,除非你拿到它的父目录,否则它不会返回所需的结果,就像问题中所做的那样。 – 2014-03-07 21:08:17

5

对于目前Android应用程序包:

public String getDataDir(final Context context) throws Exception { 
    return context.getPackageManager().getPackageInfo(context.getPackageName(), 0).applicationInfo.dataDir; 
} 

对于任何包:

public String getAnyDataDir(final Context context, final String packageName) throws Exception { 
    return context.getPackageManager().getPackageInfo(packageName, 0).applicationInfo.dataDir; 
} 
2

基于@贾里德-洞穴溶液。对于任何包,但通过上下文作为参数...

public static String getDataDir(Context context) throws Exception { 
    return context.getPackageManager() 
      .getPackageInfo(context.getPackageName(), 0) 
      .applicationInfo.dataDir; 
} 
10

只需使用此代码中的

context.getApplicationInfo().dataDir 
+0

在Android 5.1上很棒,谢谢!很好很简单。 – 2017-11-09 03:27:03

相关问题