gpt4 book ai didi

java - 将目录从 Assets 复制到数据文件夹

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:22:13 33 4
gpt4 key购买 nike

我想在应用程序首次运行时将一个相当大的目录从我的应用程序的 Assets 文件夹复制到数据文件夹。我怎么做?我已经尝试了一些例子,但没有任何效果,所以我什么都没有。我的目标是 Android 4.2。

谢谢,雅尼克

最佳答案

试试你的应用程序实例的这段代码(你应该在 list 中写这个类):此代码将 Assets /文件文件夹的内容复制到应用程序的缓存文件夹(您可以将其他路径放在 copyAssetFolder() 函数中)。仅当 App 首次启动时

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import android.app.Application;
import android.content.Context;
import android.content.res.AssetManager;
import android.preference.PreferenceManager;

public class MyApplication extends Application {
private static Context s_sharedContext;

@Override
public void onCreate () {
super.onCreate();
if (!PreferenceManager.getDefaultSharedPreferences(
getApplicationContext())
.getBoolean("installed", false)) {
PreferenceManager.getDefaultSharedPreferences(
getApplicationContext())
.edit().putBoolean("installed", true).commit();

copyAssetFolder(getAssets(), "files",
"/data/data/com.example.appname/files");
}
}

private static boolean copyAssetFolder(AssetManager assetManager,
String fromAssetPath, String toPath) {
try {
String[] files = assetManager.list(fromAssetPath);
new File(toPath).mkdirs();
boolean res = true;
for (String file : files)
if (file.contains("."))
res &= copyAsset(assetManager,
fromAssetPath + "/" + file,
toPath + "/" + file);
else
res &= copyAssetFolder(assetManager,
fromAssetPath + "/" + file,
toPath + "/" + file);
return res;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}

private static boolean copyAsset(AssetManager assetManager,
String fromAssetPath, String toPath) {
InputStream in = null;
OutputStream out = null;
try {
in = assetManager.open(fromAssetPath);
new File(toPath).createNewFile();
out = new FileOutputStream(toPath);
copyFile(in, out);
in.close();
in = null;
out.flush();
out.close();
out = null;
return true;
} catch(Exception e) {
e.printStackTrace();
return false;
}
}

private static 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);
}
}

}

关于java - 将目录从 Assets 复制到数据文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16983989/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com