1

アプリケーションで作成したファイルへのアクセスに問題があります。インターネットで考えられるすべての提案を調べましたが、まだファイルにアクセスできません。

  • ルート化された電話を使用しています
  • Samsung Galaxy Nexus の外部ストレージにファイルを書き込んでいます
  • DDMS は作成されたファイルを認識しますが、プルしようとすると次のように表示されます。

[2013-06-25 11:45:26 - ddms] 転送エラー: そのようなファイルまたはディレクトリはありません

[2013-06-25 11:45:26] 選択のプルに失敗しました: そのようなファイルまたはディレクトリはありません

ただし、ファイルは DDMS で表示されます。はい、左側のデバイス エクスプローラーで電話とパッケージの両方を選択してみました。

ルートとして adb シェルを開くと、次のようになります。

CDストレージ/SDカード0

それから私は両方に入った

chmod 777 マイパッケージ

chmod -R 777 myPackage

それでも、このディレクトリに書き込んだファイルのアクセス許可は変更されません。また、myPackage ディレクトリ内のファイルに対して直接 chmod 777 を実行しても機能せず、「そのようなファイルまたはディレクトリはありません」が返されます。

言うまでもなく、シェルの上からファイルをプルすることはできません。

ファイルを生成するために使用しているコードは次のとおりです。

protected void onHandleIntent(Intent arg0) {

    ArrayList<String> parameters = new ArrayList<String>();

    String fileName;
    File file;
    File parameterFile;

    //generate data containing general information about the device
    //retrieve the data from the intent

    parameters=arg0.getStringArrayListExtra("com.example.mypackage.parameters");
    for(int i = 0; i < parameters.size(); ++i)
    {
        parameter = parameters.get(i);
        String[] split = parameter.split(" ");
        String name=split[1];
        fileName = name + ".csv";

        //check the state of the external storage
        String state = Environment.getExternalStorageState();
        Log.e("DIR: ", "STATE: " + Environment.getExternalStorageState());
        //return info if the storage is read-only
        if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state))
        {Log.e("DIR: ", "STATE: READ_ONLY");}

        final File parametersDir = new File(Environment.getExternalStoragePublicDirectory("myPackage"), "Parameters");
        parametersDir.mkdirs();

        parameterFile = new File(parametersDir, fileName);
        parameterFile.setExecutable(true);
        generateTextFile(parameterFile, parameter);

        //check file's permissions
        parameterFile.setExecutable(true, false); 
        parameterFile.setReadable(true, false);
        parameterFile.setWritable(true, false);

        boolean executable = parameterFile.canExecute();
        boolean readable = parameterFile.canRead();
        boolean writable = parameterFile.canWrite();

        if(!executable){Log.e("FILE: ", "File cannnot be executed.");}
        if(!readable){Log.e("FILE: ", "File cannnot be read.");}
        if(!writable){Log.e("FILE: ", "File cannnot be written to.");}

        }

そして、これが私がファイルを生成するために使用している方法です

private void generateTextFile(File file, String string)
   {    
        try {                   
            FileOutputStream stream = new FileOutputStream(file);

            try{
                FileWriter writer = new FileWriter(file);
                writer.append(string);
                writer.flush();
                writer.close();

                String path = file.getPath();
                Log.e("Directory: ", path);

            } 

            catch (IOException e) 
            {
                Log.e("FILE: ", "Cannot create filewriter. Writer problem.");
            }

            finally 
            {
                stream.getFD().sync();
                stream.flush();
                stream.close();
            }

        }    
        catch(IOException e)

        {
            Log.e("FILE: ", "Cannot write to file. Stream problem.");
        }
   }

ログによると、ファイルが書き込まれると、ファイルを読み取り可能、書き込み可能、​​実行可能に設定しているにもかかわらず、それらのアクセス許可は変更されません

疑問を解消するために、私もマニフェストで宣言しました

uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"

uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"

本当に次に何をすればいいのかわからないところまで来てしまったので、誰か助けていただければとてもうれしいです。

4

0 に答える 0