我已经在我的Android设备上将一个10 MB大小的mp3文件分成10个1 MB的mp3格式,每个文件都由播放器成功播放,但在读取所有10个文件的数据并将其写入单个文件,新文件的总大小超过17 MB,文件不会自行播放。以下是代码:
文件分割代码:
File file = new File(Environment.getExternalStorageDirectory()
+ "/MusicFile.mp3");
try {
FileInputStream fis = new FileInputStream(file);
FileOutputStream fos = null;
int size = 1048576; // 1 MB of data
byte buffer[] = new byte[size];
int count = 0;
int i = 0;
while (true) {
i = fis.read(buffer, 0, size);
if (i == -1) {
break;
}
File filename = getSplitFileName("split_" + count);
fos = new FileOutputStream(filename);
fos.write(buffer, 0, i);
++count;
}
fis.close();
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
} catch (Exception e2) {
e2.printStackTrace();
}
文件加入代码:
File folder = new File(cacheDirSplit.getAbsolutePath());
File files[] = folder.listFiles();
BufferedReader bufReader = null;
BufferedWriter bufWriter = null;
if (files.length > 1) {
try {
File fileName = getJoinedFileName("NewMusicFile");
String data;
for (int i = 0; i < files.length; i++) {
long dataSize = 0;
bufReader = new BufferedReader(new FileReader(
files[i]));
bufWriter = new BufferedWriter(new FileWriter(
fileName, true));
while ((data = bufReader.readLine()) != null) {
bufWriter.write(data);
dataSize = dataSize + data.getBytes().length;
}
Log.i("TAG", "File : " + files[i] + "size ==> "
+ dataSize);
}
bufReader.close();
bufWriter.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
我不明白的是,当读取每个文件时,LOGCAT输出打印时读取的内容为1.7MB,而当我检查分割文件时,读取的文件仅为1MB。代码有什么问题,还是有其他一些我不知道的事情?提前谢谢。
答案 0 :(得分:1)
您不能对mp3文件的内容使用readLine()
。 readLine()
仅适用于文本文件。如果十个真的可以播放和真正的mp3文件,你必须首先剥离标题,因为Onur解释。