从资产文件夹中的子文件夹复制文件
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/
我正在尝试从资产文件夹中的命名子文件夹复制文件,但在尝试使用该文件时收到 "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/