我使用以下代码将音频文件从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文件中,我有唱歌按钮,当我点击该按钮时文件将移动。此代码执行时没有错误,但文件不会移动。
答案 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();
}
}
});
}
我希望这会帮助你。