1

android の場合と同様に (android sdk/tools フォルダーを介して) コマンド ラインから Linux シェル コマンドを実行して、同様に mnt フォルダー/data フォルダーにアクセスできます。(例:cd data ls)そのコマンドをAndroidでプログラムから実行したいのですが、どうすれば可能ですか?


次のコードを使用してシェルコマンドを実行しています

Process p = Runtime.getRuntime().exec("cd data");

しかし、それは私に例外を与えています

java.io.IOException: Error running exec(). Command: [cd, data] Working 
Directory:  null Environment: null


では、どうすればよいのでしょうか。よろしくお願いします。

4

5 に答える 5

6

cdLinuxコマンドではなく、シェルに組み込まれたコマンドです。そのシェルプロセスのコンテキストで現在の作業ディレクトリを変更します。あなたの場合、コマンドが成功した場合、子プロセスに対してのみ成功し(すぐに終了します)、自分のプロセスには影響しません。

于 2012-09-06T12:54:31.260 に答える
0

/data/data/_other-package-name_Android では、プロセスには、他のアプリの 内のファイルを読み取る権限や、ディレクトリ内のプライベート ファイルを一覧表示する権限がありません/data/data/_other-package-name_/files。ただし、 lib ディレクトリ内のファイルを一覧表示して読み取る権限があり、他のパッケージがこのファイルをパブリックとして開いている場合は、/data/data/_other-package-name_/lib内の特定のファイルを見ることができます。/data/data/_other-package-name_/files

つまり、other-packageが以下に沿って何かを行う場合:

FileOutputStream fos = openFileOutput("public_file", Context.MODE_WORLD_READABLE);
fos.write("hello world".getBytes());
fos.close();

次に、パッケージはこのファイルを次のように読み取ることができます。

byte[] bytes = new byte[100];
FileInputStream fis = new FileInputStream(new File("/data/data/*other-package*/files/public_file"));
int cnt = fis.read(bytes);
fis.close();
Log.d("Two_Libs", new String(bytes, 0, cnt));

ただし、そのディレクトリ内のパブリック ファイルを一覧表示して検出することはできません。

于 2012-09-09T15:27:09.833 に答える
0

アプリのプライベート データ フォルダーへのパスを取得するには、Java から以下を使用します。

File MyData = Ctxt.getDir("Foo");

Ctxt は、Activity のような Context オブジェクトです。のようなパスが返されます/data/data/com.activity.networkRequestDetector/app_Foo。Android では読み取り/書き込み/data/data/com.activity.networkRequestDetector/は推奨されないことに注意してください。これはアプリケーションのサンドボックスのルートであり、操作しないでください。

データ フォルダーからファイルを開くには、次のようにします。

FileInputStream Stm = new FileInputStream(new File(MyData, "Filename.txt"));

一般に、シェル コマンドで実行できることはすべて、アプリでも実行できます。シェル コマンドは、他のすべての人と同じように API を使用する単なるプログラムです。

于 2012-09-06T14:25:49.947 に答える
0

次のように使用します:-

 Process process = Runtime.getRuntime().exec("command to be executed");
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
于 2020-05-05T10:13:05.347 に答える
0

これを試して :

Process p = Runtime.getRuntime().exec("cd /data");
于 2012-09-06T12:54:18.393 に答える