关于安卓复制/data/data文件的问题

囧蜀黍 囧蜀黍 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
想要复制在/data/data目录下的某个文件,却出现错误,原代码如下:
package com.jiong.copyma;

import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {

private Button m_btn1;
private final static String FROMPATH = "data/data/com.square_enix.ss/files/dt.txt";
private final static String TOPATH = "data/data/com.square_enix.ss/";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
upgradeRootPermission(getPackageCodePath());
m_btn1 = (Button) findViewById(R.id.account1);
// m_btn2 = (Button)findViewById(R.id.account2);
m_btn1.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Log.e("11", "3333333");
if (copy(FROMPATH, TOPATH) == 0) {
Toast.makeText(MainActivity.this, "文件拷贝成功!!!", 20000)
.show();

} else {
Toast.makeText(MainActivity.this, "文件拷贝失败!!!", 20000)
.show();
}
}

});
}

public static boolean upgradeRootPermission(String pkgCodePath) {
Process process = null;
DataOutputStream os = null;
try {
String cmd="chmod 777 " + "data/data/com.square_enix.ss/files/dt.txt";
process = Runtime.getRuntime().exec("su"); //切换到root帐号
os = new DataOutputStream(process.getOutputStream());
os.writeBytes(cmd + "\n");
os.writeBytes("exit\n");
os.flush();
process.waitFor();
} catch (Exception e) {
return false;
} finally {
try {
if (os != null) {
os.close();
}
process.destroy();
} catch (Exception e) {
}
}
return true;
}

public int copy(String fromFile, String toFile)
{
//要复制的文件目录
File[] currentFiles;
File root = new File(fromFile);
//如同判断SD卡是否存在或者文件是否存在
//如果不存在则 return出去
if(!root.exists())
{
return -1;
}
//如果存在则获取当前目录下的全部文件 填充数组
currentFiles = root.listFiles();

//目标目录
File targetDir = new File(toFile);
//创建目录
if(!targetDir.exists())
{
targetDir.mkdirs();
}
//遍历要复制该目录下的全部文件
for(int i= 0;i<currentFiles.length;i++)
{
if(currentFiles[i].isDirectory())//如果当前项为子目录 进行递归
{
copy(currentFiles[i].getPath() + "/", toFile + currentFiles[i].getName() + "/");

}else//如果当前项为文件则进行文件拷贝
{
CopyFile(currentFiles[i].getPath(), toFile + currentFiles[i].getName());
}
}
return 0;
}


// 文件拷贝
// 要复制的目录下的所有非子目录(文件夹)文件拷贝
public int CopyFile(String fromFile, String toFile) {


Log.e("11", "22222");
//File in = new File(fromFile);
//File out = new File(toFile);
Log.e("11", "555555");
try {
Log.e("11", "6666666");
//FileInputStream fosfrom = new FileInputStream(in);
//FileOutputStream fosto = new FileOutputStream(out);
InputStream fosfrom = new FileInputStream(fromFile);
OutputStream fosto = new FileOutputStream(toFile);
byte bt[] = new byte[1024];
Log.e("11", "44444");
int c;
while ((c = fosfrom.read(bt)) > 0) {
fosto.write(bt, 0, c);
}
fosfrom.close();
fosto.close();
return 0;

} catch (Exception ex) {
ex.printStackTrace();
return -1;
}

}

}


错误提示:
09-26 23:44:09.520: E/11(11363): 3333333
09-26 23:44:09.520: E/AndroidRuntime(11363): FATAL EXCEPTION: main
09-26 23:44:09.520: E/AndroidRuntime(11363): java.lang.NullPointerException
09-26 23:44:09.520: E/AndroidRuntime(11363): at com.jiong.copyma.MainActivity.copy(MainActivity.java:103)
09-26 23:44:09.520: E/AndroidRuntime(11363): at com.jiong.copyma.MainActivity$1.onClick(MainActivity.java:43)
09-26 23:44:09.520: E/AndroidRuntime(11363): at android.view.View.performClick(View.java:4171)
09-26 23:44:09.520: E/AndroidRuntime(11363): at android.view.View$PerformClick.run(View.java:17070)
09-26 23:44:09.520: E/AndroidRuntime(11363): at android.os.Handler.handleCallback(Handler.java:615)
09-26 23:44:09.520: E/AndroidRuntime(11363): at android.os.Handler.dispatchMessage(Handler.java:92)
09-26 23:44:09.520: E/AndroidRuntime(11363): at android.os.Looper.loop(Looper.java:137)
09-26 23:44:09.520: E/AndroidRuntime(11363): at android.app.ActivityThread.main(ActivityThread.java:4797)
09-26 23:44:09.520: E/AndroidRuntime(11363): at java.lang.reflect.Method.invokeNative(Native Method)
09-26 23:44:09.520: E/AndroidRuntime(11363): at java.lang.reflect.Method.invoke(Method.java:511)
09-26 23:44:09.520: E/AndroidRuntime(11363): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
09-26 23:44:09.520: E/AndroidRuntime(11363): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
09-26 23:44:09.520: E/AndroidRuntime(11363): at dalvik.system.NativeStart.main(Native Method)
...全文

相关推荐

评论 7
收藏 已收藏
分享
返回顶部
囧蜀黍
Android 80,490 成员 91,375 内容