2013-07-01 2 views
2

Используя ls, я получаю следующую информацию. Как получить то же самое из объекта File в android. Как получить строку имени u0_a23, используя File Object.Как получить права собственности на файл и разрешения в 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 показывает список выполняемых в настоящее время pids. Так что они уже работают. Более того, если я запустил их снова, я не уверен.) Я могу это сделать. B) Он решит мою цель или нет, так как теперь владелец приложения станет владельцем вновь созданного процесса. C) Не знаю, сколько времени займет – mSO

0

В Java 7 есть Files#getOwner, иначе единственный способ, как сказал vRallev, с помощью процесса.

Пробуйте процесс, чтобы увидеть, насколько быстро (на моем устройстве, Galaxy S2 в режиме DEBUG, занимает всего 40 мс. Не так много, я думаю).

Я попытался реализовать немного Object 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. Я на самом деле разрабатываю приложение, требующее разрешения root с библиотекой RootTools, и производительность довольно хороша. К сожалению, это довольно «unix» spcific, что вы (и я) пытаемся сделать, поэтому нет ничего лучше этого. :) – Enrichman