我不确定这段代码有什么问题?它在SD卡中创建一个文件但是有0个字节.. 你们其中一个人可以调查并告诉我这是错的吗?
这里我试图将资产文件夹中的文件从codes.db复制到SD卡..
AssetManager assetManager = getResources().getAssets();
InputStream in = null;
OutputStream out = null;
BufferedInputStream buf = null;
try {
in = assetManager.open("codes.db");
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("Error jh: " + e.getMessage());
}
if (in != null) {
try {
out = new FileOutputStream("/sdcard/" + "codes.db");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
System.out.println("Error Line : " + e.getLocalizedMessage());
}
}
System.out.println("IN VALUE : " + in);
System.out.println("OUT VALUE : " + out);
int chunkBytes = 0;
byte[] outputByte = new byte[1024];
if (in != null && out != null) {
try {
// while ((chunkBytes = in.read(outputByte, 0, 1024)) != -1) {
while ((chunkBytes = in.read()) != -1) {
// write contents to the file
System.out.println("I m here");
// out.write(outputByte, 0, (int) chunkBytes);
out.write(chunkBytes);
// publish the progress of downloading..
}
} catch (Exception e) {
// TODO Auto-generated catch block
System.out.println("Error here: "
+ e.getLocalizedMessage().toString());
}
}
try {
in.close();
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("Error there: " + e.getLocalizedMessage());
}
}
我在所有情况下都收到此错误..我确定我已获得我的权限设置... sd卡中的codes.db是0字节... :(
05-24 09:59:34.221: W/System.err(5559): java.io.IOException
05-24 09:59:34.221: W/System.err(5559): at android.content.res.AssetManager.readAsset(Native Method)
05-24 09:59:34.221: W/System.err(5559): at android.content.res.AssetManager.access$700(AssetManager.java:36)
05-24 09:59:34.221: W/System.err(5559): at android.content.res.AssetManager$AssetInputStream.read(AssetManager.java:571)
05-24 09:59:34.221: W/System.err(5559): at com.bewo.copy.TestCopyActivity.copyStream(TestCopyActivity.java:136)
05-24 09:59:34.221: W/System.err(5559): at com.bewo.copy.TestCopyActivity.onCreate(TestCopyActivity.java:19)
05-24 09:59:34.221: W/System.err(5559): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-24 09:59:34.221: W/System.err(5559): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2635)
05-24 09:59:34.221: W/System.err(5559): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2687)
05-24 09:59:34.221: W/System.err(5559): at android.app.ActivityThread.access$2300(ActivityThread.java:127)
05-24 09:59:34.221: W/System.err(5559): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2035)
05-24 09:59:34.221: W/System.err(5559): at android.os.Handler.dispatchMessage(Handler.java:99)
05-24 09:59:34.221: W/System.err(5559): at android.os.Looper.loop(Looper.java:123)
05-24 09:59:34.221: W/System.err(5559): at android.app.ActivityThread.main(ActivityThread.java:4635)
05-24 09:59:34.221: W/System.err(5559): at java.lang.reflect.Method.invokeNative(Native Method)
05-24 09:59:34.221: W/System.err(5559): at java.lang.reflect.Method.invoke(Method.java:521)
05-24 09:59:34.221: W/System.err(5559): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
05-24 09:59:34.221: W/System.err(5559): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
05-24 09:59:34.221: W/System.err(5559): at dalvik.system.NativeStart.main(Native
答案 0 :(得分:3)
我希望以下代码可以帮助您 -
package com.paresh.copyfileassetstoAssets;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import android.app.Activity;
import android.content.res.AssetManager;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
public class CopyFileAssetsToSDCardActivity extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
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); // if files resides inside the "Files" directory itself
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);
}
}
}
复制资产文件到SD卡的最佳Blog。并且,还要确保External Storage
所需的权限答案 1 :(得分:3)
经过多次搜索,我只想要一个我以后可以在一个线程中使用的方法,这就是我用于我的应用程序的方法:
static public void copyFileFromAssets(Context context, String file, String dest) throws Exception
{
InputStream in = null;
OutputStream fout = null;
int count = 0;
try
{
in = context.getAssets().open(file);
fout = new FileOutputStream(new File(dest));
byte data[] = new byte[1024];
while ((count = in.read(data, 0, 1024)) != -1)
{
fout.write(data, 0, count);
}
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
if (in != null)
{
try {
in.close();
} catch (IOException e)
{
}
}
if (fout != null)
{
try {
fout.close();
} catch (IOException e) {
}
}
}
}
请告诉我这是否有帮助!
答案 2 :(得分:1)
无论您使用什么,请尝试增加AVD管理器中SD卡的大小。 我希望它可以帮到你。
答案 3 :(得分:0)
这是我在项目中使用的代码。我认为这对您有用
public static void copyAssets(Context context) {
AssetManager assetManager = context.getAssets();
String[] files = null;
try {
files = assetManager.list("");
} catch (IOException e) {
Log.e("tag", "Failed to get asset file list.", e);
}
if (files != null) for (String filename : files) {
InputStream in = null;
OutputStream out = null;
try {
in = assetManager.open(filename);
out = new FileOutputStream(Environment.getExternalStorageDirectory()+"/www/openrap/" + filename);
copyFile(in, out);
} catch(IOException e) {
Log.e("tag", "Failed to copy asset file: " + filename, e);
}
finally {
if (in != null) {
try {
in.close();
in = null;
} catch (IOException e) {
}
}
if (out != null) {
try {
out.flush();
out.close();
out = null;
} catch (IOException e) {
}
}
}
}
}
public 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);
}
}