2012-03-01 92 views
0

我用下面的代碼將音頻文件從res/raw文件夾移動到SD卡,當我執行此代碼時,移動。爲什麼會發生,在哪一行我犯了錯誤。當我從一個文件從原始文件夾移動到SD卡在Android中,文件不會移動

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

    } 

} 

在我的XML文件我有唱的按鈕,當我點擊該按鈕,文件將移動。此代碼無錯地執行,但文件不會移動。

回答

2

而不是空的catch塊,而是嘗試寫出來。

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

此外,您有權限寫入SD卡嗎?

permission.WRITE_EXTERNAL_STORAGE 
1

什麼是資源文件夾中歌曲的文件名?我問的原因是,有一個最大文件大小,可以回讀一個壓縮文件。您的文件(如果以.ogg擴展名命名)不應該被壓縮,因此不會受此限制限制。但是,如果您將其命名爲壓縮的其他東西,則可能會出現此問題。

記錄錯誤的好方法是使用androids Log方法。這樣做是這樣的:

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 VS 1048576)」 的消息。

但確定的唯一方法是記錄您的錯誤。也有可能SD卡的空間不足,或者您無權寫入。

0

在這個例子中,我的原始文件是「test.pdf」 我們將在我們的手機中使用「下載」文件夾。 原始文件夾中的「test.pdf」將被移動到「Download/test_filemove」文件夾中作爲「example.pdf」 在「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(); } } }); }

我希望這能幫到你。

相關問題