【发布时间】:2013-12-12 07:37:33
【问题描述】:
我正在使用 MediaRecorder 构建一个录音机,我想重命名创建的文件(因为 createTempFile 会在文件名中添加一个长随机数)
所以我的主要步骤是:
// I get the files on the directory I'm writing and the amount of files + 1
File f = new File(myDirectory.toString());
File file[] = f.listFiles();
String fileNumber = String.valueOf(file.length+1);
try {
// I create the temp file to record
audiofile = File.createTempFile("record-"+fileNumber, ".3gp", myDirectory);
} catch (IOException e) {
Log.e(TAG, "sdcard access error");
return;
}
// START THE RECORDER
recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile(audiofile.getAbsolutePath());
recorder.prepare();
recorder.start();
当用户单击停止按钮时,我将文件添加到目录中
values.put(MediaStore.Audio.Media.TITLE, audiofile.getName());
values.put(MediaStore.Audio.Media.DATE_ADDED, (int) (current / 1000));
values.put(MediaStore.Audio.Media.MIME_TYPE, "audio/3gpp");
values.put(MediaStore.Audio.Media.DATA, audiofile.getAbsolutePath());
ContentResolver contentResolver = getContentResolver();
Uri base = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
Uri newUri = contentResolver.insert(base, values);
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, newUri));
Toast.makeText(this, "Successfully added file in " + recordedDirectory+audiofile.getName(), Toast.LENGTH_LONG).show();
问题是文件被命名,例如“记录-3824925563.3gp”
在保存之前是否有重命名 TempFile 或阻止 createTempFile() 添加随机数?或任何其他解决方案来实现这一点?
我尝试创建一个新文件,然后将 .renameTo(newFile) 转换为我的音频文件,但没有成功。
编辑: 正如迈克尔建议的那样,我尝试使用我想要的参数创建一个新文件并重命名它
File AudioFile = new File(myDirectory+"/record-"+fileNumber+".3gp");
AudioFile.createNewFile();
audiofile.renameTo(AudioFile);
不会引发任何错误。但是文件最终会附加相同的随机数
编辑 2:
根据 jboi 的回答,效果很好,我正在添加我使用的最终代码。我创建了该文件以在我的最终 MediaStore 函数中引用它。
File f = new File(myDirectory.toString());
File file[] = f.listFiles();
int fileNumber = file.length+1;
audiofile = new File(String.format(Locale.US, "%s%crecord-%08d.3pg",
quickrecorderDirectory, File.separatorChar, fileNumber));
recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile(audiofile.getAbsolutePath());
【问题讨论】:
-
1) 代替
createTempFile(),您可以使用您最终想要的路径和文件名(如果您事先知道的话) 2) 在您的audiofile上调用renameTo(newFile),它将具有名称在newFile中给出(如果没有发生错误)。File对象并不是真正的文件,它主要是表示特定文件或目录(是否存在)的名称和路径信息 -
谢谢迈克尔,但我无法让它工作。请查看已编辑的问题。
-
忘记您创建的文件编号。它不可靠,并且会在多线程环境中产生错误。你最终想给文件起什么名字?
-
@Cruclax 阅读文档,他们声明
renameTo()在失败时返回 false,检查一下。无需创建要重命名的文件(这甚至可能是失败的原因)。使用仅大写/小写不同的多个变量名称不是一个好主意。使用以大写字母开头的变量名是违反 Java 约定的 -
@jboi 我想将文件命名为“Record-[fileNumberOnThatFolder+1].3gp”
标签: java android rename mediarecorder temporary-files