Android java.io.filenotfoundexeption:/storage/sdcard/app.apk打开失败的Eacces(权限被拒绝)
我想将我的apk文件从我的应用程序的de包复制到外部存储器: 类副本:Android java.io.filenotfoundexeption:/storage/sdcard/app.apk打开失败的Eacces(权限被拒绝),android,permissions,copy,android-external-storage,Android,Permissions,Copy,Android External Storage,我想将我的apk文件从我的应用程序的de包复制到外部存储器: 类副本: package com.pfe.bls; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.nio.channels.FileChannel; import android.os.Environment; public
package com.pfe.bls;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;
import android.os.Environment;
public class Copyapk {
public static void copy() throws IOException {
String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath();
String fileName = "app.apk";
FileInputStream inStream = new FileInputStream("/data/data/com.pfe.bls/app.apk");
FileOutputStream outStream = new FileOutputStream(baseDir + File.separator + fileName);
FileChannel inChannel = inStream.getChannel();
FileChannel outChannel = outStream.getChannel();
inChannel.transferTo(0, inChannel.size(), outChannel);
inStream.close();
outStream.close();
}
}
我在clicklistener内的主要活动中的方法:
btn_createApp.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
try {
Copyapk.copy();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
android清单中的权限:
<uses-permission android:name="android.permissions.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="com.android.vending.BILLING" />
<uses-permission android:name="android.permission.MOUNT_FORMAT_FILESYSTEMS" />
您的数据文件夹存储在哪里? 它是在外部存储器中还是在应用程序存储器中。要从应用程序存储目录访问它,您应该使用以下命令
PackageManager m = getPackageManager();
String s = getPackageName();
try {
PackageInfo p = m.getPackageInfo(s, 0);
s = p.applicationInfo.dataDir;
} catch (NameNotFoundException e) {
Log.w("yourtag", "Error not found ", e);
}
使用字符串s作为fileinputstream的参数。它位于应用程序存储“com.pfe.bls”中。确定后,您应该使用我发布的代码。数据目录的路径将存储在字符串s中,您可以将其用于fileinputstream。首先尝试查看以字符串s返回的路径。