我想要複製其他程序底下的shared_prefs/內的檔案,並複製到一個名為bgyy的檔案, 可是總是報錯? 可否有人幫解決
private void copy()
{
try
{
Process root = Runtime.getRuntime().exec("su");
File sd = Environment.getExternalStorageDirectory();
String path=sd.getPath()+"/bgyy";
File files=new File(path);
//files.mkdir();
if (sd.canWrite()) {
files.mkdir();
File file = new File("/data/data/otherpackagename/shared_prefs/CCC.xml");
File fos = new File("/sdcard/bgyy/CCC.xml");
FileInputStream inStream = new FileInputStream(file);
FileOutputStream outStream = new FileOutputStream(fos);
if(!file.exists()){
// 寫入檔案
int readLen = 0;
byte[] buf = new byte[1024];
while ((readLen = inStream.read(buf)) != -1) {
outStream.write(buf, 0, readLen);
}
//inStream.flush();
inStream.close();
outStream.close();
}
}
}catch(Exception e)
{
e.printStackTrace();
}
07-23 08:07:24.583: W/System.err(29841): java.io.FileNotFoundException: /data/data/otherpackagename/shared_prefs/CCC.xml: open failed: EACCES (Permission denied)
07-23 08:07:24.583: W/System.err(29841): at libcore.io.IoBridge.open(IoBridge.java:416)
07-23 08:07:24.583: W/System.err(29841): at java.io.FileInputStream.<init>(FileInputStream.java:78)
07-23 08:07:24.583: W/System.err(29841): at com.XXX.MainActivity.copyDatabase(MainActivity.java:81)
07-23 08:07:24.583: W/System.err(29841): at com.XXX.MainActivity.access$0(MainActivity.java:65)
07-23 08:07:24.583: W/System.err(29841): at com.XXX.MainActivity$1.onClick(MainActivity.java:62)
07-23 08:07:24.583: W/System.err(29841): at android.view.View.performClick(View.java:4084)
07-23 08:07:24.583: W/System.err(29841): at android.view.View$PerformClick.run(View.java:16966)
07-23 08:07:24.583: W/System.err(29841): at android.os.Handler.handleCallback(Handler.java:615)
07-23 08:07:24.583: W/System.err(29841): at android.os.Handler.dispatchMessage(Handler.java:92)
07-23 08:07:24.583: W/System.err(29841): at android.os.Looper.loop(Looper.java:137)
07-23 08:07:24.583: W/System.err(29841): at android.app.ActivityThread.main(ActivityThread.java:4745)
07-23 08:07:24.583: W/System.err(29841): at java.lang.reflect.Method.invokeNative(Native Method)
07-23 08:07:24.583: W/System.err(29841): at java.lang.reflect.Method.invoke(Method.java:511)
07-23 08:07:24.583: W/System.err(29841): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
07-23 08:07:24.583: W/System.err(29841): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
07-23 08:07:24.583: W/System.err(29841): at dalvik.system.NativeStart.main(Native Method)
07-23 08:07:24.583: W/System.err(29841): Caused by: libcore.io.ErrnoException: open failed: EACCES (Permission denied)
07-23 08:07:24.583: W/System.err(29841): at libcore.io.Posix.open(Native Method)
07-23 08:07:24.583: W/System.err(29841): at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
07-23 08:07:24.583: W/System.err(29841): at libcore.io.IoBridge.open(IoBridge.java:400)
07-23 08:07:24.583: W/System.err(29841): ... 15 more
XMLJava
private void copy()
{
try
{
Process root = Runtime.getRuntime().exec("su");
File sd = Environment.getExternalStorageDirectory();
String path=sd.getPath()+"/bgyy";
File files=new File(path);
//files.mkdir();
if (sd.canWrite()) {
files.mkdir();
File file = new File("/data/data/otherpackagename/shared_prefs/CCC.xml");
File fos = new File("/sdcard/bgyy/CCC.xml");
FileInputStream inStream = new FileInputStream(file);
FileOutputStream outStream = new FileOutputStream(fos);
if(!file.exists()){
// 寫入檔案
int readLen = 0;
byte[] buf = new byte[1024];
while ((readLen = inStream.read(buf)) != -1) {
outStream.write(buf, 0, readLen);
}
//inStream.flush();
inStream.close();
outStream.close();
}
}
}catch(Exception e)
{
e.printStackTrace();
}
07-23 08:07:24.583: W/System.err(29841): java.io.FileNotFoundException: /data/data/otherpackagename/shared_prefs/CCC.xml: open failed: EACCES (Permission denied)
07-23 08:07:24.583: W/System.err(29841): at libcore.io.IoBridge.open(IoBridge.java:416)
07-23 08:07:24.583: W/System.err(29841): at java.io.FileInputStream.<init>(FileInputStream.java:78)
07-23 08:07:24.583: W/System.err(29841): at com.XXX.MainActivity.copyDatabase(MainActivity.java:81)
07-23 08:07:24.583: W/System.err(29841): at com.XXX.MainActivity.access$0(MainActivity.java:65)
07-23 08:07:24.583: W/System.err(29841): at com.XXX.MainActivity$1.onClick(MainActivity.java:62)
07-23 08:07:24.583: W/System.err(29841): at android.view.View.performClick(View.java:4084)
07-23 08:07:24.583: W/System.err(29841): at android.view.View$PerformClick.run(View.java:16966)
07-23 08:07:24.583: W/System.err(29841): at android.os.Handler.handleCallback(Handler.java:615)
07-23 08:07:24.583: W/System.err(29841): at android.os.Handler.dispatchMessage(Handler.java:92)
07-23 08:07:24.583: W/System.err(29841): at android.os.Looper.loop(Looper.java:137)
07-23 08:07:24.583: W/System.err(29841): at android.app.ActivityThread.main(ActivityThread.java:4745)
07-23 08:07:24.583: W/System.err(29841): at java.lang.reflect.Method.invokeNative(Native Method)
07-23 08:07:24.583: W/System.err(29841): at java.lang.reflect.Method.invoke(Method.java:511)
07-23 08:07:24.583: W/System.err(29841): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
07-23 08:07:24.583: W/System.err(29841): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
07-23 08:07:24.583: W/System.err(29841): at dalvik.system.NativeStart.main(Native Method)
07-23 08:07:24.583: W/System.err(29841): Caused by: libcore.io.ErrnoException: open failed: EACCES (Permission denied)
07-23 08:07:24.583: W/System.err(29841): at libcore.io.Posix.open(Native Method)
07-23 08:07:24.583: W/System.err(29841): at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
07-23 08:07:24.583: W/System.err(29841): at libcore.io.IoBridge.open(IoBridge.java:400)
07-23 08:07:24.583: W/System.err(29841): ... 15 more
XMLJava
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.FLASHLIGHT"/>
<uses-permission android:name="android.permission.READ_OWNER_DATA"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
otherContext = createPackageContext("com.jiahui.preferences",
CONTEXT_IGNORE_SECURITY);
SharedPreferences preferences = otherContext
.getSharedPreferences("test",
Context.MODE_WORLD_READABLE); 通过这种方式就可以 达到你获取其他应用的shared_pref下面的xml信息了。前提要那个应用创建的时候不是私有权限data不能通过你那种方式获取 有别的方法
我讀取shared_prefs底下的CCC.XML文件,並複製一份做為資料一
CCC.XML資料修改後
在讀取shared_prefs底下的CCC.XML文件,並複製一份做為資料二並可以隨時選取啥時要使用哪一個資料因為我是讀取其他程序的包,所以我已經加入一段程式獲取ROOT~
我已經獲取ROOT權限了感謝你的熱心回答
Retrieve, creating if needed, a new directory in which the application can place its own custom data files. You can use the returned File object to create and access files in this directory. Note that files created through a File object will only be accessible by your own application; you can only set the mode of the entire directory, not of individual files.Parameters
name Name of the directory to retrieve. This is a directory that is created as part of your application data.
mode Operating mode. Use 0 or MODE_PRIVATE for the default operation, MODE_WORLD_READABLE and MODE_WORLD_WRITEABLE to control permissions.
Returns
Returns a File object for the requested directory. The directory will have been created if it does not already exist.在android developer 找到的 相关的东西。
sorry 占用了这么多楼层 楼主 不要生气哈