2013-07-01 29 views
2

使用ls我得到以下信息。如何從android中的文件對象獲得相同的結果。 Like如何使用File Object獲取u0_a23名稱字符串。如何在android中獲取文件所有權和權限

[email protected]:/ # ls /proc/ -l             
dr-xr-xr-x root  root    2013-07-01 12:19 1 
dr-xr-xr-x root  root    2013-07-01 12:19 10 
dr-xr-xr-x root  root    2013-07-01 12:31 1069 
dr-xr-xr-x root  root    2013-07-01 12:19 11 
dr-xr-xr-x root  root    2013-07-01 12:19 12 
dr-xr-xr-x root  root    2013-07-01 12:19 13 
dr-xr-xr-x root  root    2013-07-01 12:19 14 
dr-xr-xr-x root  root    2013-07-01 12:19 2 
dr-xr-xr-x root  root    2013-07-01 12:19 25 
dr-xr-xr-x root  root    2013-07-01 12:19 26 
dr-xr-xr-x root  root    2013-07-01 12:19 27 
dr-xr-xr-x root  root    2013-07-01 12:19 28 
dr-xr-xr-x root  root    2013-07-01 12:19 29 
dr-xr-xr-x root  root    2013-07-01 12:19 290 
dr-xr-xr-x root  root    2013-07-01 12:19 292 
dr-xr-xr-x system system   2013-07-01 12:19 294 
dr-xr-xr-x root  root    2013-07-01 12:19 3 
dr-xr-xr-x system system   2013-07-01 12:19 30 
dr-xr-xr-x root  root    2013-07-01 12:19 31 
dr-xr-xr-x root  root    2013-07-01 12:19 33 
dr-xr-xr-x root  root    2013-07-01 12:19 34 
dr-xr-xr-x radio radio    2013-07-01 12:19 35 
dr-xr-xr-x u0_a23 u0_a23   2013-07-01 12:20 357 
+0

我已經用一些信息更新了我的答案。 :) – Enrichman

回答

0

您可以創建一個Process對象並執行該命令。您可以將File對象的路徑附加爲參數。之後,您可以從InputStream中讀取結果。

如果您需要示例,請發表評論。

+0

很好的破解,但不會適合我的情況,因爲我必須在<10ms內獲取信息 – mSO

+0

我還沒有測量時間。它真的需要這麼長時間嗎? – vRallev

+0

/proc顯示當前正在執行的pid列表。所以他們已經在運行了。此外,如果我再次運行它們,我不確定a)我可以做到這一點b)它會解決我的目的或不是因爲現在應用程序所有者將成爲新產生的過程的所有者c)不知道需要多長時間 – mSO

0

在Java 7中有Files#getOwner,否則正如vRallev所說的,唯一的方法是使用Process。

嘗試一個過程,看看有多快(在我的設備上,在調試模式下的Galaxy S2只需要40ms,而不是我猜)。

我試圖用文件信息實現一個小對象FileInfo。也許你會發現它很有用。我不確定它每次都會起作用(我假設唯一缺少的參數可能是大小和類似的東西),但它可能是一個開始。

public static void test() { 
    long start = System.currentTimeMillis(); 
    BufferedWriter out; 
    BufferedReader in; 
    String test = ""; 
    List<FileInfo> fileInfoList = new ArrayList<FileInfo>(); 
    try { 
     Process proc = Runtime.getRuntime().exec("ls -l"); 
     out = new BufferedWriter(new OutputStreamWriter(proc.getOutputStream())); 
     in = new BufferedReader(new InputStreamReader(proc.getInputStream())); 
     String line = ""; 
     while((line = in.readLine()) != null) { 
      fileInfoList.add(createFileInfo(line.split("\\s+"))); 
     } 
     proc.waitFor(); 
     in.close(); 
     out.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    long execTime = System.currentTimeMillis() - start; 
    System.out.println(execTime); 
} 

private static FileInfo createFileInfo(String... args) { 
    FileInfo fi = null; 
    if(args.length == 6) { 
     fi = new FileInfo(args[0],args[1],args[2],args[3] +" "+ args[4],args[5]); 
    } else if(args.length == 7) { 
     fi = new FileInfo(args[0],args[1],args[2],args[3],args[4] +" "+ args[5],args[6]); 
    } 
    return fi; 
} 

private static class FileInfo { 
    private String permissions; 
    private String owner; 
    private String group; 
    private String size; 
    private String date; 
    private String fileName; 

    private FileInfo(String permissions, String owner, String group, String size, String date, String fileName) { 
     this.permissions = permissions; 
     this.owner = owner; 
     this.group = group; 
     this.size = size; 
     this.date = date; 
     this.fileName = fileName; 
    } 

    private FileInfo(String permissions, String owner, String group, String date, String fileName) { 
     this.permissions = permissions; 
     this.owner = owner; 
     this.group = group; 
     this.date = date; 
     this.fileName = fileName; 
    } 
} 
+0

我可以這樣做,那是我記住的最後一個措施,如果沒有任何工作:)。我還有一種方法雖然通過NDK,但不知道這會多花多少時間 – mSO

+0

對我來說這似乎過於複雜(NDK)。性能對Process來說似乎並不壞。實際上,我正在開發一個需要RootTools庫的root權限的應用程序,並且性能非常好。不幸的是,它是相當「混亂」的,你(和我)正在嘗試做什麼,這就是爲什麼沒有比這更好的原因。 :) – Enrichman

相關問題