3

ls を使用すると、次の情報が得られます。Androidのファイルオブジェクトから同じものを取得する方法. ファイルオブジェクトを使用してu0_a23名前文字列を取得する方法のように。

root@android:/ # 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
4

2 に答える 2

0

Java 7 にはFiles#getOwnerがあります。それ以外の場合、唯一の方法は、vRallev が言ったように、プロセスを使用することです。

プロセスを試して、速度を確認してください (私のデバイスでは、DEBUG モードの Galaxy S2 でわずか 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;
    }
}
于 2013-07-01T16:08:27.313 に答える
0

You can create a Process object and execute the command. You could append the path of the File object as parameter. After that you can read the result from the InputStream.

Please comment if you need an example.

于 2013-07-01T13:04:46.273 に答える