我对Android很新,并且正在写某个文件。 我想要做的是使用TextToSpeech.synthesizeToFile()方法来编写音频文件。这是有效的,除了当app退出TextToSpeech引擎时自动删除它创建的文件。所以我然后尝试在另一个目录中制作创建文件的副本。为此,我使用org.apache.commons.io.FileUtils包的copyFile()方法。使用此方法只会导致新创建的文件大小为0。 我正在使用Environment.getExternalStorageDirectory()来获取适当的外部存储目录。 我试过写一个现有的目录,比如/ mnt / sdcard / Ringtones /以及/ mnt / sdcard / ...下新创建的目录。
我检查的另一件事是目标文件上File.canWrite()的结果。这实际上返回false,这可能是一个线索。但是File.setWritable()方法似乎不存在以便更改它。
我使用的代码如下,我没有看到任何异常被抛出
try {
File from = new File(tempDestFile);
File to = new File(permDestFile);
FileUtils.copyFile(from, to);
} catch(IOException e) {
Log.e(T, "Error copying file", e);
} catch(NullPointerException e) {
Log.e(T, "Error copying file", e);
}
关于我可能尝试的任何想法? 到目前为止,我找到的任何东西都没有对我有所帮助。
谢谢!我非常感谢这样一个很好的资源。
答案 0 :(得分:2)
我试图在调用[synthesizeToFile()]
[1]后立即复制文件,因此文件未完成复合/创建。因此0
字节文件大小。
它的解释方法[这里] [2]。
基本上,只需将唯一ID作为可选参数之一发送到synthesizeToFile()
。
然后,在您的活动中实施TextToSpeech.OnUtteranceCompletedListener
接口并覆盖onUtteranceCompleted()
回调方法。
onUtteranceCompleted()
。您可以检查您之前传递的唯一ID,以区分您可能正在等待完成的多个话语。
非常标准的东西,我想但是出于某种原因它会让我回避几天。
希望这可以帮助可能被卡住的其他人。
[1]:
答案 1 :(得分:0)
FileInputStream fis = new FileInputStream(tempDestFile);
FileOutputStream fos = new FileOutputStream(permDestFile);
byte[] bites= new byte[1024];
int count = fis.read(bites);
while ( count != -1){
fos.write(bites, 0, count);
count = fis.read(bites);
}
并确保WRITE_EXTERNAL_STORAGE权限在您的清单中。