从资产文件夹中的子文件夹复制文件

Copying file from subfolder in asset folder

我正在尝试从资产文件夹中的命名子文件夹复制文件,但在尝试使用该文件时收到 "not found error"。显然它似乎没有正确复制文件。

这是我所做的,也许有人能发现我的错误

方法调用:

copyfile("/lollipop/proxy.sh");

方法:

    public void copyfile(String file) {
            String of = file;
         File f = new File(of);
            String basedir = getBaseContext().getFilesDir().getAbsolutePath();


        if (!f.exists()) {
                            try {
        InputStream in =getAssets().open(file);
        FileOutputStream out =getBaseContext().openFileOutput(of, MODE_PRIVATE);
       byte[] buf = new byte[1024];
        int len;
     while ((len = in.read(buf)) > 0) {
                 out.write(buf, 0, len);
               }
            out.close();
           in.close();

  Runtime.getRuntime().exec("chmod 700 " + basedir + "/" + of);
                    } catch (IOException e) {
                                Log.e(TAG, "Error reading I/0 stream", e);
                            }
                        }
                    }

尝试使用 proxy.sh 失败,因为该文件似乎从未被复制过,但是当我删除“棒棒糖”目录时,它工作正常。好像哪里不对?发送

openFileOutput() 不接受子目录。由于 of 指向 /lollipop/proxy.sh,您正在尝试创建一个子目录。

那些在访问资产文件夹中的子目录时遇到问题的人,因为没有明确回答对此的解释,这就是我实现它的方式。

AssetManager assetManager = getAssets();
    String[] files = null;
    try {
      if (Build.VERSION.SDK_INT >= 21)
          files = assetManager.list("api-16");
      else
          files = assetManager.list("");
    } catch (IOException e) {
      Log.e(TAG, e.getMessage());
    }
    if (files != null) {
      for (String file : files) {
        InputStream in = null;
        OutputStream out = null;
        try {

          if (Build.VERSION.SDK_INT >= 21)
            in = assetManager.open("api-16/" + file);
          else
            in = assetManager.open(file);
          out = new FileOutputStream("/data/data/yourpackagename/" + file);
          copyFile(in, out);
          in.close();
          in = null;
          out.flush();
          out.close();
          out = null;
        } catch (Exception e) {
          Log.e(TAG, e.getMessage());
        }
      }
    }
  }

  private void copyFile(InputStream in, OutputStream out) throws IOException {
    byte[] buffer = new byte[1024];
    int read;
    while ((read = in.read(buffer)) != -1) {
      out.write(buffer, 0, read);
    }
  }

方法调用 现在可以从

访问文件
/data/data/yourpackagename/  

所以从那里调用文件。使用

getFilesDir() 

不会像从

得到的那样工作
/data/data/yourpackagename/files/