我一直在尝试在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文件。我找到的最好的方法是根据需要写入包含更改的临时文件,然后删除原始文件并将新文件重命名为旧文件。