2015-01-13 81 views
3

我开发一个Android应用程序,在主要活动我想用下面的代码行列出特定包中的所有文件:列出文件返回null

String[] files = new File("src/com/android/app/").list(); 

,则返回null !?有什么不对 ? 谢谢。

+0

@Kon:我用的是相同的语法在Java SE应用程序和它的作品,我认为有些事情相对于应用程序的结构在Android设备安装(APK)时 – user3728064

+0

'的src/COM /安卓/ app /'在Android应用程序项目中建议文件,特别是Java源代码目录。这在运行时不会作为任何目录中文件系统上的文件存在,更不用说在您尝试使用的破损目录中。 – CommonsWare

+0

@CommonsWare你是对的,我想知道如何在APK文件中表示项目结构! – user3728064

回答

0

我解决了这个问题,同时所有的Dalvik虚拟机编译的类都要使用DexFile类Dex File documentation

public List<String> getClasses(Context context, String package) { 
    List<String> classes = new LinkedList<String>(); 
    try { 
     DexFile dexFile = new DexFile(context.getPackageCodePath()); 
      for (Enumeration<String> iter = dexFile.entries(); iter.hasMoreElements();) { 
       String currentClass = iter.nextElement(); 
        if (currentClass.contains(package)) { 
          classes.add(currentClass); 
        } 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    return classes; 
} 
2

JavadocsFile类:

用户界面和操作系统使用与系统相关的路径名 字符串来命名文件和目录。该课程提供了一个 抽象的,与系统无关的分层路径名称视图。一个 抽象路径名有两个组件:

An optional system-dependent prefix string, such as a disk-drive specifier, "/" for the UNIX root directory, or "\\\\" for a Microsoft Windows UNC pathname, and 
A sequence of zero or more string names. 

所以你缺少前缀字符串,它似乎。换句话说,路径名不是相对的,它是绝对的。

+0

我使用了'System.getProperty(“file.separator”)'但徒劳无功,我得到了同样的错误,我认为这个项目APK文件打包时更改结构。我也试过'String [] files = new File(“src/com/android/app /”)。list();''''''''''我在文件array:config,cache,acct,vendor,d中得到了这个。 。,数据,根,开发。现在我试图了解APK文件的结构以检索编译类的路径 – user3728064

+0

您引用的语句表示前缀是可选的,因此它不能'丢失',并且您完全错过了真正的问题。 – EJP