我的问题是,我有这个代码工作(几乎完全完美),但它创建了两个相同的文件,我假设它是FileOutputStream,试图创建一个“新文件”并将其放入其参数并删除使用“file.delete();”用“save.close();”关闭之后,就像人们推荐这么多搜索一样,但我仍然保留两个文件,唯一的区别是创建的文件是空的,有0kb。
我从教程中复制的代码的一半,另一半是我自己编写的,但我仍然不完全理解它的作用,因为我不是程序员,而java不是我的主要编程语言。 我希望有人可以帮助我,谢谢。
public static boolean SetRingtone(Context context, int type, int music) {
byte[] buffer = null; int size = 0;
InputStream fIn = context.getResources().openRawResource(music);
try {
size = fIn.available();
buffer = new byte[size];
fIn.read(buffer); fIn.close();
} catch (IOException e) {return false;}
String folderType = "";
if (type == RingtoneManager.TYPE_RINGTONE) folderType = "ringtones" + File.separator;
else if (type == RingtoneManager.TYPE_NOTIFICATION) folderType = "notifications" + File.separator;
else if (type == RingtoneManager.TYPE_ALARM) folderType = "alarms" + File.separator;
String path = Environment.getExternalStorageDirectory() + File.separator + "media/audio" + File.separator + folderType;
String filename = context.getResources().getResourceEntryName(music) + ".mp3";
filename = filename.replace("_", " - ");
String[] artist = filename.split(" - ");
boolean exists = (new File(path)).exists();
if (!exists) {new File(path).mkdirs();}
try {
FileOutputStream save;
save = new FileOutputStream(path + filename);
save.write(buffer); save.flush(); save.close();
}
catch (FileNotFoundException e) {return false;}
catch (IOException e) {return false;}
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + path + filename)));
File f = new File(path, filename);
ContentValues values = new ContentValues();
values.put(MediaStore.MediaColumns.DATA, f.getAbsolutePath());
values.put(MediaStore.Audio.Media.ARTIST, artist[0]);
values.put(MediaStore.Audio.Media.ALBUM, context.getString(R.string.app_name));
values.put(MediaStore.MediaColumns.TITLE, filename);
values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mpeg");
if (type == RingtoneManager.TYPE_RINGTONE) {values.put(MediaStore.Audio.Media.IS_RINGTONE, true);}
else if (type == RingtoneManager.TYPE_NOTIFICATION) {values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true);}
else if (type == RingtoneManager.TYPE_ALARM) {values.put(MediaStore.Audio.Media.IS_ALARM, true);}
Uri uri = MediaStore.Audio.Media.getContentUriForPath(f.getAbsolutePath());
Uri newUri = context.getContentResolver().insert(uri, values);
RingtoneManager.setActualDefaultRingtoneUri(context, type, newUri);
context.getContentResolver().insert(MediaStore.Audio.Media.getContentUriForPath(f.getAbsolutePath()), values);
return true;
}
编辑:代码的第二个版本,它创建空文件。
FileOutputStream save;
try {
File j = new File(path, filename);
save = new FileOutputStream(j);
save.write(buffer); save.flush(); save.close(); j.delete();
}
编辑2:好的,经过几次测试之后,我意识到该文件只在第一次运行时创建了0kb,如果我再次运行它,文件会正常创建,但总是带有两个新创建的文件,具有相同的名称,扩展名和在同一目录中。