我试图从资产文件夹中的命名子文件夹复制文件,但是我发现了#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
答案 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/