当我将文件从原始文件夹移动到android中的SD卡时,该文件将不会移动

时间:2012-03-01 17:33:03

标签: android

我使用以下代码将音频文件从res/raw文件夹移动到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);
            }
        });

    }

}

在我的xml文件中,我有唱歌按钮,当我点击该按钮时文件将移动。此代码执行时没有错误,但文件不会移动。

3 个答案:

答案 0 :(得分:2)

不要使用空的catch块,而是尝试将它们写出来。

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

此外,您是否有权写入SD卡?

permission.WRITE_EXTERNAL_STORAGE

答案 1 :(得分: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卡也可能没有空间,或者您没有权限写入它。

答案 2 :(得分:0)

在这个例子中,我的原始文件是&#34; test.pdf&#34; 我们将使用&#34;下载&#34;我们手机中的文件夹。 &#34;&检验.pdf#34;在原始文件夹中将移动到&#34;下载/ test_filemove&#34;文件夹为&#34; example.pdf&#34; 制作新的&#34; raw&#34;文件夹在&#34; res&#34;夹。 复制&#34; test.pdf&#34; to&#34; raw&#34;文件夹中。

当然你应该在布局中制作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(); } } }); }

我希望这会帮助你。