使用touch创建文件后chmod不能立即工作

时间:2014-03-14 17:47:08

标签: android root chmod su

我一直在尝试在android的受保护存储中创建一个文件,即数据/数据。 我知道这需要root访问权限。所以这是我为创建文件而执行的代码。 在此之后,我将文件chmod到766,以便它可以由刚创建它的Android应用程序写入。

protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            String app="some_installed_package";
            if(isPackageInstalled(app,getBaseContext())){
            try{
            Process process=Runtime.getRuntime().exec("su");

            DataOutputStream suStream = new DataOutputStream(process.getOutputStream());
            String filePath="/data/data/some_folder/file1.xml";
            String filePath2="/data/data/some_folder/file2.xml";
            try
            {
                suStream.writeBytes("touch "+filePath2+"\n");
                suStream.flush();
            }
            catch(Exception e)
            {
                Log.e("App",e.getMessage());
            }
            try
            {
              suStream.writeBytes("chmod 0777 "+filePath2+ "\n");
              suStream.flush();
            }
            catch(Exception e)
            {
                Log.e("App2",e.getMessage());
            }
            String ans="Error";
                try{
                    readFileAsString(filePath,filePath2);
                    ans="Done!";
                    //suStream.writeBytes("rm "+filePath+ "\n");
                    //suStream.writeBytes("mv "+filePath2+" "+filePath+"\n");
                    }
                catch(Exception e){
                    Log.e("App",(String)e.getMessage());

                }
                finally{
                    //suStream.writeBytes("chmod 0660 "+filePath+ "\n");
                    suStream.writeBytes("exit\n");
                    suStream.flush();
                    suStream.close();
                }

            }
        catch(IOException e){
            Log.e("App","Sudo not found!");
        }
        }
        else
        {
            Toast.makeText(getBaseContext(),"App not installed!", Toast.LENGTH_SHORT).show();
        }
        }

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

private boolean isPackageInstalled(String packagename, Context context) {
    PackageManager pm = context.getPackageManager();
    try {
        pm.getPackageInfo(packagename, PackageManager.GET_ACTIVITIES);
        return true;
    } catch (NameNotFoundException e) {
        return false;
    }
}

public static void readFileAsString(String filePath,String filePath2) throws IOException
{
    String separator = System.getProperty("line.separator");
    BufferedReader reader = new BufferedReader(new FileReader(filePath));
    String line, results = "";
    while( ( line = reader.readLine() ) != null)
    {
        results += line + separator;
    }
    reader.close();
    FileWriter fw = new FileWriter(filePath2);
    BufferedWriter bw = new BufferedWriter(fw);
    Log.e("App",results);
    try
    {
    bw.write(results);
    }
    catch(Exception e)
    {
        Log.e("App",e.getMessage());
    }
    bw.close();
    }


}

文件确实已创建,但后来我收到了#34;权限被拒绝"我尝试写它时出错。 要确认权限更改,我使用文件管理器打开文件,并找到要设置的权限,因为我已使用代码设置它们。

接下来没有改变任何东西我重新启动应用程序(现在文件已经使用相应的权限创建)它是可写的,一切都按照我的意愿进行。

我不明白这里出了什么问题。我需要在创建文件后立即写入文件。

P.S我的目标是编辑XML文件。我找到的最好的方法是根据需要写入包含更改的临时文件,然后删除原始文件并将新文件重命名为旧文件。

0 个答案:

没有答案