Android 将资产移动到/data/data/APP\u NAME/文件

Android 将资产移动到/data/data/APP\u NAME/文件,android,import,device,assets,Android,Import,Device,Assets,快速参考我所读的内容 还有更多,但作为一个新手只能发布2条 在我的应用程序中有一个按钮,如果用户决定在根设备上重新启动引导程序,该按钮将重新启动引导程序。我有一个名为“reboot”的重新启动二进制文件,它将允许命令运行,它位于/assets/中。使用上述方法,我似乎无法“重新启动”以移动或甚至在我的apk的/data/data/中创建目录“files”。我的问题是,是否有一个更好的指南来指导我学习这门学科,或者这些是最好的,我只是迟钝地去理解它。或者,如果你有一些其他的示例代码,我可以通读

快速参考我所读的内容

还有更多,但作为一个新手只能发布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”内。