Android 将资产移动到/data/data/APP\u NAME/文件
快速参考我所读的内容 还有更多,但作为一个新手只能发布2条 在我的应用程序中有一个按钮,如果用户决定在根设备上重新启动引导程序,该按钮将重新启动引导程序。我有一个名为“reboot”的重新启动二进制文件,它将允许命令运行,它位于/assets/中。使用上述方法,我似乎无法“重新启动”以移动或甚至在我的apk的/data/data/中创建目录“files”。我的问题是,是否有一个更好的指南来指导我学习这门学科,或者这些是最好的,我只是迟钝地去理解它。或者,如果你有一些其他的示例代码,我可以通读并尝试理解,这将是完美的。多谢各位 添加了我正在做的示例Android 将资产移动到/data/data/APP\u NAME/文件,android,import,device,assets,Android,Import,Device,Assets,快速参考我所读的内容 还有更多,但作为一个新手只能发布2条 在我的应用程序中有一个按钮,如果用户决定在根设备上重新启动引导程序,该按钮将重新启动引导程序。我有一个名为“reboot”的重新启动二进制文件,它将允许命令运行,它位于/assets/中。使用上述方法,我似乎无法“重新启动”以移动或甚至在我的apk的/data/data/中创建目录“files”。我的问题是,是否有一个更好的指南来指导我学习这门学科,或者这些是最好的,我只是迟钝地去理解它。或者,如果你有一些其他的示例代码,我可以通读
$ public static String moveReboot = "/data/data/com.DPE.MuchSuck/Files";
public static String reboot = "file:///android_asset/reboot";
public static Context myContext;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
try {
moveFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
$ public void moveFile() throws IOException {
AssetManager assetManager = getAssets();
InputStream myInput = assetManager.open(reboot);
String outFileName = moveReboot + reboot;
OutputStream myOutput = new FileOutputStream(outFileName);
byte[] buffer = new byte [1024];
int length;
while ((length = myInput.read(buffer))>0){
myOutput.write(buffer, 0, length);
}
myOutput.flush();
myOutput.close();
myInput.close();
在运行apk时,“文件”中没有显示任何内容,甚至“文件”也没有显示
看起来您的“outFileName”文件名不好。
尝试使用getExternalFilesDir()获取SDRAM的路径
见:
编辑
道格,这是我的实现
private void copyAssetToSDRAM(String strFilename)
{
try
{
//complete path to target file
File fileTarget = new File(Environment.getExternalStorageDirectory(), strFilename);
//data source stream
AssetManager assetManager = ApplicationContext.getContext().getAssets();
InputStream istr = assetManager.open(strFilename);
//data destination stream
//NOTE: at this point you'll get an exception if you don't have permission to access SDRAM ! (see manifest)
OutputStream ostr = new FileOutputStream(fileTarget);
byte[] buffer = new byte[1024];
int length;
while ((length = istr.read(buffer))>0)
{
ostr.write(buffer, 0, length);
}
ostr.flush();
ostr.close();
istr.close();
}
catch(Exception e)
{
Toast.makeText(ApplicationContext.getContext(), "File-Copy Error: "+strFilename, Toast.LENGTH_LONG).show();
e.printStackTrace();
}
}
要使用它,请执行以下操作:
if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED))
{
copyAssetToSDRAM("myfile.png");
}
else
{
Toast.makeText(ApplicationContext.getContext(), "Unable to copy images. NO SDRAM", Toast.LENGTH_LONG).show();
}
感谢您的输入,我将对此进行研究。嗨,道格,我已经修改了上面的答案。代码应该可以很容易地插入到您的代码中。如果它解决了您的问题,请接受我的答案,谢谢!虽然答案提供了一个有效的解决方案,但代码“插入”并不是100%安全的。处理外部资源(IO)时的第一条规则,在finally块中关闭流,决不在“try”内。