如何Raw文件复制到SD卡 [英] How to Copy Raw files into SD Card

查看:205
本文介绍了如何Raw文件复制到SD卡的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有问题,尝试从原始文件夹的音频文件复制到SD卡,我已经成功地创建文件夹中的SD卡,但无法在复制歌曲...

我使用本教程: HTTP:// WWW .androidhive.info / 2012/03 / Android的建筑音频播放器教程/

 字符串路径= Environment.getExternalStorageDirectory()+/ PriyankaChopra;
    文件DIR =新的文件(路径);
     尝试{
       如果(dir.mkdir()){
           最终诠释[] = mSongs新INT [] {R.raw.exotic,R.raw.pyaar,R.raw.tinka};
            的for(int i = 0; I< mSongs.length;我++){
                尝试{
                     字符串str_song_name = I +MP3。
                     CopyRAWtoSDCard(mSongs [I],/ SD卡/ PriyankaChopra /+ str_song_name);
                }赶上(IOException异常五){
                    // TODO自动生成catch块
                    e.printStackTrace();
                }
            }
       }其他{
          的System.out.println(错误,而复制歌曲到SD卡!);       }
     }赶上(例外五){
       e.printStackTrace();
     }    }    私人无效CopyRAWtoSDCard(INT ID,字符串路径)抛出IOException
        InputStream的在= getResources()openRawResource(ID)。
        FileOutputStream中出=新的FileOutputStream(路径);
        字节[] = BUFF新的字节[1024];
        INT读= 0;        尝试{
            而((读= in.read(BUFF))0){
                out.write(BUFF,0,读);
            }
        } {最后
            附寄();
            out.close();
    }

日志说:

  4月10日至19日:57:43.729:D / dalvikvm(997):GC_FOR_ALLOC释放77K,7%的游离2942K / 3136K,暂停64ms的,总67ms
4月10日至19日:57:44.019:我/的System.out(997):错误,而复制歌曲到SD卡!
4月10日至19日:57:44.328:D / gralloc_goldfish(997):无仿真模拟GPU检测。
5月10日至19日:39:32.988:D / dalvikvm(4086):GC_FOR_ALLOC释放53K,6%免费2964K / 3136K,暂停45ms,总47ms
5月10日至19日:39:33.318:我/的System.out(4086):错误,而复制歌曲到SD卡!
5月10日至19日:39:34.209:D / gralloc_goldfish(4086):无仿真模拟GPU检测。
六月10日至19日:20:10.529:D / dalvikvm(8485):GC_FOR_ALLOC释放46K,6%免费2964K / 3132K,暂停37ms,总39MS
六月10日至19日:20:11.369:D / AndroidRuntime(8485):关闭VM
六月10日至19日:20:11.369:W / dalvikvm(8485):主题ID = 1:螺纹未捕获的异常(组= 0x41465700)退出
六月10日至19日:20:11.500:E / AndroidRuntime(8485):致命异常:主要
六月10日至19日:20:11.500:E / AndroidRuntime(8485):了java.lang.RuntimeException:无法启动活动ComponentInfo {com.androidhive.musicplayer / com.androidhive.musicplayer.Music}:java.lang.IndexOutOfBoundsException:无效指数为0,大小为0
六月10日至19日:20:11.500:E / AndroidRuntime(8485):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
六月10日至19日:20:11.500:E / AndroidRuntime(8485):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
六月10日至19日:20:11.500:E / AndroidRuntime(8485):在android.app.ActivityThread.access $ 600(ActivityThread.java:141)
六月10日至19日:20:11.500:E / AndroidRuntime(8485):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1256)
六月10日至19日:20:11.500:E / AndroidRuntime(8485):在android.os.Handler.dispatchMessage(Handler.java:99)
六月10日至19日:20:11.500:E / AndroidRuntime(8485):在android.os.Looper.loop(Looper.java:137)
六月10日至19日:20:11.500:E / AndroidRuntime(8485):在android.app.ActivityThread.main(ActivityThread.java:5103)
六月10日至19日:20:11.500:E / AndroidRuntime(8485):在java.lang.reflect.Method.invokeNative(本机方法)
六月10日至19日:20:11.500:E / AndroidRuntime(8485):在java.lang.reflect.Method.invoke(Method.java:525)
六月10日至19日:20:11.500:E / AndroidRuntime(8485):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:737)
六月10日至19日:20:11.500:E / AndroidRuntime(8485):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
六月10日至19日:20:11.500:E / AndroidRuntime(8485):在dalvik.system.NativeStart.main(本机方法)
六月10日至19日:20:11.500:E / AndroidRuntime(8485):java.lang.IndexOutOfBoundsException:通过而产生的无效指数为0,大小为0
六月10日至19日:20:11.500:E / AndroidRuntime(8485):在java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
六月10日至19日:20:11.500:E / AndroidRuntime(8485):在java.util.ArrayList.get(ArrayList.java:308)
六月10日至19日:20:11.500:E / AndroidRuntime(8485):在com.androidhive.musicplayer.Music.playSong(Music.java:282)
六月10日至19日:20:11.500:E / AndroidRuntime(8485):在com.androidhive.musicplayer.Music.onCreate(Music.java:81)
六月10日至19日:20:11.500:E / AndroidRuntime(8485):在android.app.Activity.performCreate(Activity.java:5133)
六月10日至19日:20:11.500:E / AndroidRuntime(8485):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
六月10日至19日:20:11.500:E / AndroidRuntime(8485):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
六月10日至19日:20:11.500:E / AndroidRuntime(8485):11 ...更多
六月10日至19日:22:14.589:D / dalvikvm(8922):GC_FOR_ALLOC释放50K,6%免费2964K / 3136K,暂停为33ms,共为35ms
六月10日至19日:22:14.809:D / AndroidRuntime(8922):关闭VM
六月10日至19日:22:14.809:W / dalvikvm(8922):主题ID = 1:螺纹未捕获的异常(组= 0x41465700)退出
六月10日至19日:22:14.870:E / AndroidRuntime(8922):致命异常:主要
六月10日至19日:22:14.870:E / AndroidRuntime(8922):了java.lang.RuntimeException:无法启动活动ComponentInfo {com.androidhive.musicplayer / com.androidhive.musicplayer.Music}:java.lang.IndexOutOfBoundsException:无效指数为0,大小为0
六月10日至19日:22:14.870:E / AndroidRuntime(8922):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
六月10日至19日:22:14.870:E / AndroidRuntime(8922):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
六月10日至19日:22:14.870:E / AndroidRuntime(8922):在android.app.ActivityThread.access $ 600(ActivityThread.java:141)
六月10日至19日:22:14.870:E / AndroidRuntime(8922):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1256)
六月10日至19日:22:14.870:E / AndroidRuntime(8922):在android.os.Handler.dispatchMessage(Handler.java:99)
六月10日至19日:22:14.870:E / AndroidRuntime(8922):在android.os.Looper.loop(Looper.java:137)
六月10日至19日:22:14.870:E / AndroidRuntime(8922):在android.app.ActivityThread.main(ActivityThread.java:5103)
六月10日至19日:22:14.870:E / AndroidRuntime(8922):在java.lang.reflect.Method.invokeNative(本机方法)
六月10日至19日:22:14.870:E / AndroidRuntime(8922):在java.lang.reflect.Method.invoke(Method.java:525)
六月10日至19日:22:14.870:E / AndroidRuntime(8922):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:737)
六月10日至19日:22:14.870:E / AndroidRuntime(8922):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
六月10日至19日:22:14.870:E / AndroidRuntime(8922):在dalvik.system.NativeStart.main(本机方法)
六月10日至19日:22:14.870:E / AndroidRuntime(8922):java.lang.IndexOutOfBoundsException:通过而产生的无效指数为0,大小为0
六月10日至19日:22:14.870:E / AndroidRuntime(8922):在java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
六月10日至19日:22:14.870:E / AndroidRuntime(8922):在java.util.ArrayList.get(ArrayList.java:308)
六月10日至19日:22:14.870:E / AndroidRuntime(8922):在com.androidhive.musicplayer.Music.playSong(Music.java:281)
六月10日至19日:22:14.870:E / AndroidRuntime(8922):在com.androidhive.musicplayer.Music.onCreate(Music.java:80)
六月10日至19日:22:14.870:E / AndroidRuntime(8922):在android.app.Activity.performCreate(Activity.java:5133)
六月10日至19日:22:14.870:E / AndroidRuntime(8922):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
六月10日至19日:22:14.870:E / AndroidRuntime(8922):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
六月10日至19日:22:14.870:E / AndroidRuntime(8922):11 ...更多


解决方案

与我替换你的code。

这是工作完美的在这里。

添加仅此权限:

 <使用许可权的android:NAME =android.permission.WRITE_EXTERNAL_STORAG​​E/>

的Java code:

 进口的java.io.File;
进口java.io.FileOutputStream中;
进口java.io.IOException异常;
进口的java.io.InputStream;
进口android.app.Activity;
进口android.os.Bundle;
进口android.os.Environment;公共类样品延伸活动{@覆盖
保护无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.activity_main);
    最终诠释[] = mSongs新INT [] {R.raw.background,R.raw.background1,R.raw.background2};
    的for(int i = 0; I< mSongs.length;我++){
        尝试{
            字符串路径= Environment.getExternalStorageDirectory()+/ PriyankaChopra;
            文件DIR =新的文件(路径);
            如果(dir.mkdirs()|| dir.isDirectory()){
                字符串str_song_name = I +.MP3
                CopyRAWtoSDCard(mSongs [I],路径+文件分割符+ str_song_name);
            }
        }赶上(IOException异常五){
            e.printStackTrace();
        }
    }}私人无效CopyRAWtoSDCard(INT ID,字符串路径)抛出IOException
    InputStream的在= getResources()openRawResource(ID)。
    FileOutputStream中出=新的FileOutputStream(路径);
    字节[] = BUFF新的字节[1024];
    INT读= 0;
    尝试{
        而((读= in.read(BUFF))0){
            out.write(BUFF,0,读);
        }
    } {最后
        附寄();
        out.close();
    }
}}

I am having problem, while trying to copy audio files from raw folder to SD Card, I have successfully created folder in SD Card, but not able to copy songs in that...

I am using this tutorial: http://www.androidhive.info/2012/03/android-building-audio-player-tutorial/

 String path = Environment.getExternalStorageDirectory() + "/PriyankaChopra" ;
    File dir = new File(path);
     try{
       if(dir.mkdir()) {
           final int[] mSongs = new int[] { R.raw.exotic, R.raw.pyaar, R.raw.tinka };
            for (int i = 0; i < mSongs.length; i++) {
                try {
                     String str_song_name= i +".mp3";
                     CopyRAWtoSDCard(mSongs[i], "/sdcard/PriyankaChopra/"+str_song_name);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }   
       } else {
          System.out.println("Error, while Copying songs to SD Card!");

       }
     }catch(Exception e){
       e.printStackTrace();
     }

    }   

    private void CopyRAWtoSDCard(int id, String path) throws IOException {
        InputStream in = getResources().openRawResource(id);
        FileOutputStream out = new FileOutputStream(path);
        byte[] buff = new byte[1024];
        int read = 0;

        try {
            while ((read = in.read(buff)) > 0) {
                out.write(buff, 0, read);
            }
        } finally {
            in.close();
            out.close();
    }

Log says:

10-19 04:57:43.729: D/dalvikvm(997): GC_FOR_ALLOC freed 77K, 7% free 2942K/3136K, paused 64ms, total 67ms
10-19 04:57:44.019: I/System.out(997): Error, while Copying songs to SD Card!
10-19 04:57:44.328: D/gralloc_goldfish(997): Emulator without GPU emulation detected.
10-19 05:39:32.988: D/dalvikvm(4086): GC_FOR_ALLOC freed 53K, 6% free 2964K/3136K, paused 45ms, total 47ms
10-19 05:39:33.318: I/System.out(4086): Error, while Copying songs to SD Card!
10-19 05:39:34.209: D/gralloc_goldfish(4086): Emulator without GPU emulation detected.
10-19 06:20:10.529: D/dalvikvm(8485): GC_FOR_ALLOC freed 46K, 6% free 2964K/3132K, paused 37ms, total 39ms
10-19 06:20:11.369: D/AndroidRuntime(8485): Shutting down VM
10-19 06:20:11.369: W/dalvikvm(8485): threadid=1: thread exiting with uncaught exception (group=0x41465700)
10-19 06:20:11.500: E/AndroidRuntime(8485): FATAL EXCEPTION: main
10-19 06:20:11.500: E/AndroidRuntime(8485): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.androidhive.musicplayer/com.androidhive.musicplayer.Music}: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
10-19 06:20:11.500: E/AndroidRuntime(8485):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
10-19 06:20:11.500: E/AndroidRuntime(8485):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
10-19 06:20:11.500: E/AndroidRuntime(8485):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
10-19 06:20:11.500: E/AndroidRuntime(8485):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
10-19 06:20:11.500: E/AndroidRuntime(8485):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-19 06:20:11.500: E/AndroidRuntime(8485):     at android.os.Looper.loop(Looper.java:137)
10-19 06:20:11.500: E/AndroidRuntime(8485):     at android.app.ActivityThread.main(ActivityThread.java:5103)
10-19 06:20:11.500: E/AndroidRuntime(8485):     at java.lang.reflect.Method.invokeNative(Native Method)
10-19 06:20:11.500: E/AndroidRuntime(8485):     at java.lang.reflect.Method.invoke(Method.java:525)
10-19 06:20:11.500: E/AndroidRuntime(8485):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
10-19 06:20:11.500: E/AndroidRuntime(8485):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
10-19 06:20:11.500: E/AndroidRuntime(8485):     at dalvik.system.NativeStart.main(Native Method)
10-19 06:20:11.500: E/AndroidRuntime(8485): Caused by: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
10-19 06:20:11.500: E/AndroidRuntime(8485):     at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
10-19 06:20:11.500: E/AndroidRuntime(8485):     at java.util.ArrayList.get(ArrayList.java:308)
10-19 06:20:11.500: E/AndroidRuntime(8485):     at com.androidhive.musicplayer.Music.playSong(Music.java:282)
10-19 06:20:11.500: E/AndroidRuntime(8485):     at com.androidhive.musicplayer.Music.onCreate(Music.java:81)
10-19 06:20:11.500: E/AndroidRuntime(8485):     at android.app.Activity.performCreate(Activity.java:5133)
10-19 06:20:11.500: E/AndroidRuntime(8485):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
10-19 06:20:11.500: E/AndroidRuntime(8485):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
10-19 06:20:11.500: E/AndroidRuntime(8485):     ... 11 more
10-19 06:22:14.589: D/dalvikvm(8922): GC_FOR_ALLOC freed 50K, 6% free 2964K/3136K, paused 33ms, total 35ms
10-19 06:22:14.809: D/AndroidRuntime(8922): Shutting down VM
10-19 06:22:14.809: W/dalvikvm(8922): threadid=1: thread exiting with uncaught exception (group=0x41465700)
10-19 06:22:14.870: E/AndroidRuntime(8922): FATAL EXCEPTION: main
10-19 06:22:14.870: E/AndroidRuntime(8922): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.androidhive.musicplayer/com.androidhive.musicplayer.Music}: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
10-19 06:22:14.870: E/AndroidRuntime(8922):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
10-19 06:22:14.870: E/AndroidRuntime(8922):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
10-19 06:22:14.870: E/AndroidRuntime(8922):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
10-19 06:22:14.870: E/AndroidRuntime(8922):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
10-19 06:22:14.870: E/AndroidRuntime(8922):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-19 06:22:14.870: E/AndroidRuntime(8922):     at android.os.Looper.loop(Looper.java:137)
10-19 06:22:14.870: E/AndroidRuntime(8922):     at android.app.ActivityThread.main(ActivityThread.java:5103)
10-19 06:22:14.870: E/AndroidRuntime(8922):     at java.lang.reflect.Method.invokeNative(Native Method)
10-19 06:22:14.870: E/AndroidRuntime(8922):     at java.lang.reflect.Method.invoke(Method.java:525)
10-19 06:22:14.870: E/AndroidRuntime(8922):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
10-19 06:22:14.870: E/AndroidRuntime(8922):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
10-19 06:22:14.870: E/AndroidRuntime(8922):     at dalvik.system.NativeStart.main(Native Method)
10-19 06:22:14.870: E/AndroidRuntime(8922): Caused by: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
10-19 06:22:14.870: E/AndroidRuntime(8922):     at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
10-19 06:22:14.870: E/AndroidRuntime(8922):     at java.util.ArrayList.get(ArrayList.java:308)
10-19 06:22:14.870: E/AndroidRuntime(8922):     at com.androidhive.musicplayer.Music.playSong(Music.java:281)
10-19 06:22:14.870: E/AndroidRuntime(8922):     at com.androidhive.musicplayer.Music.onCreate(Music.java:80)
10-19 06:22:14.870: E/AndroidRuntime(8922):     at android.app.Activity.performCreate(Activity.java:5133)
10-19 06:22:14.870: E/AndroidRuntime(8922):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
10-19 06:22:14.870: E/AndroidRuntime(8922):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
10-19 06:22:14.870: E/AndroidRuntime(8922):     ... 11 more

解决方案

Replace your code with mine.

it is working perfect here.

Add only this Permission :

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Java Code :

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;

public class Sample extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final int[] mSongs = new int[] { R.raw.background, R.raw.background1, R.raw.background2 };
    for (int i = 0; i < mSongs.length; i++) {
        try {
            String path = Environment.getExternalStorageDirectory() + "/PriyankaChopra";
            File dir = new File(path);
            if (dir.mkdirs() || dir.isDirectory()) {
                String str_song_name = i + ".mp3";
                CopyRAWtoSDCard(mSongs[i], path + File.separator + str_song_name);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

private void CopyRAWtoSDCard(int id, String path) throws IOException {
    InputStream in = getResources().openRawResource(id);
    FileOutputStream out = new FileOutputStream(path);
    byte[] buff = new byte[1024];
    int read = 0;
    try {
        while ((read = in.read(buff)) > 0) {
            out.write(buff, 0, read);
        }
    } finally {
        in.close();
        out.close();
    }
}

}

这篇关于如何Raw文件复制到SD卡的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆