从多个文件读取数据并将数据写入新文件会产生意外结果?

时间:2014-05-31 11:32:34

标签: java android filewriter

我已经在我的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。代码有什么问题,还是有其他一些我不知道的事情?提前谢谢。

1 个答案:

答案 0 :(得分:1)

您不能对mp3文件的内容使用readLine()readLine()仅适用于文本文件。如果十个真的可以播放和真正的mp3文件,你必须首先剥离标题,因为Onur解释。