2012-03-01 17 views
0

次のコードを使用して、オーディオファイルのフォームres/rawをSDカードに移動しました。このコードを実行すると、動きません。どうして私は間違っていたのでしょうか?私のXMLファイルにアンドロイドの生のフォルダからSDカードにファイルを移動すると、ファイルは移動しません

MoveAudio.java

public class MoveAudioextends Activity { 

    /** Called when the activity is first created. */ 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     Button a = (Button) findViewById(R.id.Button01); 

     a.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 
       byte[] buffer = null; 
       InputStream fIn = getBaseContext().getResources() 
         .openRawResource(R.raw.song); 
       int size = 0; 
       System.out.println("<<<<<<<SIZE>>>>>>>>>>>>>>>>>>>>" + fIn); 
       try { 
        size = fIn.available(); 
        System.out 
          .println("<<<<<<<SIZE>>>>>>>>>>>>>>>>>>>>" + size); 
        buffer = new byte[size]; 
        fIn.read(buffer); 
        fIn.close(); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 

       } 
       String path = "/sdcard/media/audio/ringtones/"; 
       String filename = "examplefile" + ".ogg"; 

       boolean exists = (new File(path)).exists(); 
       if (!exists) { 
        System.out 
          .println("<<<<<<<FALSE SO INSIDE THE CONDITION>>>>>>>>>>>>>>>>>>>>"); 
        new File(path).mkdirs(); 
       } 

       FileOutputStream save; 
       try { 
        save = new FileOutputStream(path + filename); 
        System.out 
          .println("<<<<<<<SAVE>>>>>>>>>>>>>>>>>>>>" + save); 
        save.write(buffer); 
        save.flush(); 
        save.close(); 
       } catch (FileNotFoundException e) { 
        // TODO Auto-generated catch block 

       } catch (IOException e) { 
        // TODO Auto-generated catch block 

       } 
       sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, 
         Uri.parse("file://" + path + filename))); 

       File k = new File(path, filename); 
       System.out.println("<<<<<<<SAVE>>>>>>>>>>>>>>>>>>>>" + k); 
      } 
     }); 

    } 

} 

は、私は、ファイルを移動するそのボタンをクリックすると、ボタンを歌っていました。このコードはエラーなく実行されますが、ファイルは移動しません。

答えて

2

空のキャッチブロックを使用する代わりに、キャッチブロックを書き留めてください。

e.printStackTrace(); 
// I believe it is. 

さらに、SDカードに書き込む権限をお持ちですか?

permission.WRITE_EXTERNAL_STORAGE 
1

リソースフォルダ内の曲のファイル名は?私が尋ねる理由は、圧縮されたファイルのために読み返すことができる最大ファイルサイズがあるということです。あなたのファイルは拡張子.oggで命名されていても圧縮されるべきではないので、この制限に制約されません。しかし、圧縮された別の名前を付けると、この問題が発生する可能性があります。

エラーをログする良い方法は、アンドロイドのログメソッドを使用することです。このようにそれを行う:

catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
    Log.e(TAG, "FileNotFoundException", e); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
    Log.e(TAG, "IOException", e); 

    } 

あなたは "データを超えるUNCOMPRESS_DATA_MAX(1290892 1048576 VS)" というメッセージを取得することができます。

エラーを記録するには、確かに頼るしかありません。また、SDカードの容量が足りないか、SDカードに書き込み権限がありません。

0

この例では、私の生ファイルは "test.pdf" 私たちの電話で "ダウンロード"フォルダを使用します。 生のフォルダの "test.pdf"は "example.pdf"のように "Download/test_filemove"フォルダに移動さ​​れます "res"フォルダに新しい "raw"フォルダを作成します。 "test.pdf"を "raw"フォルダにコピーします。

あなたのレイアウトには必ずButton01を作成する必要があります。

は、私はちょうどあなたの例を少し変更し

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

以下のようにマニフェストファイルにアクセス権を与えることを忘れないでください。

 
public class MainActivity extends Activity {

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button a = (Button) findViewById(R.id.Button01); a.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { byte[] buffer = null; InputStream fIn = getBaseContext().getResources() .openRawResource(R.raw.test); int size = 0; System.out.println("<<<<<<<SIZE>>>>>>>>>>>>>>>>>>>>" + fIn); try { size = fIn.available(); System.out .println("<<<<<<<SIZE>>>>>>>>>>>>>>>>>>>>" + size); buffer = new byte[size]; fIn.read(buffer); fIn.close(); } catch (IOException e) { // TODO Auto-generated catch block } String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/test_filemove/"; String filename = "example" + ".pdf"; boolean exists = (new File(path)).exists(); if (!exists) { System.out .println("<<<<<<<FALSE SO INSIDE THE CONDITION>>>>>>>>>>>>>>>>>>>>"); new File(path).mkdirs(); } FileOutputStream save; try { save = new FileOutputStream(path+filename); System.out .println("<<<<<<<SAVE>>>>>>>>>>>>>>>>>>>>" + save); save.write(buffer); save.flush(); save.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block } catch (IOException e) { e.printStackTrace(); } } }); }

私はこれがあなたを助けてくれることを願っています。

関連する問題