从资产文件夹

时间:2015-07-11 11:25:09

标签: android fileoutputstream android-assets

我试图从资产文件夹中的命名子文件夹复制文件,但是我发现了#34;未找到错误"当试图使用该文件。显然,似乎没有正确复制文件。

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

方法调用

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失败,因为文件似乎从未被复制但是当我删除"棒棒糖"目录它工作正常。怎么了? TNX

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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/