这是MyNewMain.java
CopyAssets();
private void CopyAssets() {
AssetManager assetManager = getAssets();
String[] files = null;
try {
files = assetManager.list("Files");
} catch (IOException e) {
Log.e("tag", e.getMessage());
}
for(String filename : files) {
System.out.println("File name => "+filename);
InputStream in = null;
OutputStream out = null;
try {
in = assetManager.open("Files/"+filename);
out = new FileOutputStream(Environment.getExternalStorageDirectory().toString() +"/" + filename);
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);
}
}
在我的资源文件夹中,我有一个名为Files的文件夹。有.txt文件 onCreate methed我正在调用CopyAssets();
我使用的方法越低。
问题是这没有任何作用。我绝对不知道为什么我的文件没有被复制。 在我的清单中我添加了
和app.iml包含
答案 0 :(得分:0)
我知道这已经得到了解答,但我有一种更优雅的方式从资产目录复制到SD卡上的文件。它不需要"对于"循环但是使用文件流和频道来完成工作。
(注意)如果使用任何类型的压缩文件,APK,PDF,...您可能希望在插入资产之前重命名文件扩展名,然后在将其复制到SD卡后重命名)
AssetManager am = context.getAssets();
AssetFileDescriptor afd = null;
try {
afd = am.openFd( "MyFile.dat");
// Create new file to copy into.
File file = new File(Environment.getExternalStorageDirectory() + java.io.File.separator + "NewFile.dat");
file.createNewFile();
copyFdToFile(afd.getFileDescriptor(), file);
} catch (IOException e) {
e.printStackTrace();
}
一种复制文件而无需循环播放文件的方法。
public static void copyFdToFile(FileDescriptor src, File dst) throws IOException {
FileChannel inChannel = new FileInputStream(src).getChannel();
FileChannel outChannel = new FileOutputStream(dst).getChannel();
try {
inChannel.transferTo(0, inChannel.size(), outChannel);
} finally {
if (inChannel != null)
inChannel.close();
if (outChannel != null)
outChannel.close();
}
}
答案 1 :(得分:-1)
在android api 22上,在getFileDescriptor()
对象上调用AssetFileDescriptor
将返回整个apk文件的FileDescriptor。所以@ Salmaan的答案在android api 22上是错误的。
我没有在其他api中看到源代码。所以我不知道getFileDescriptor()
在其他api中的行为。
我在this question下找到答案。