如何在不覆盖文件的情况下在文件中写入字节

时间:2010-12-31 08:12:44

标签: android file io

我从服务器获取大块字节,我需要在文件中写入它们而不覆盖旧块。我怎样才能做到这一点? 我这样做..

private void createMapFile(String fileName, byte mapBytes[]) throws IOException
    {       
        File filePath = new File(Environment.getExternalStorageDirectory()+"/map/"+fileName);

        PrintWriter pw = new PrintWriter(new FileOutputStream(filePath, true));  
        pw.print(mapBytes);  
        pw.flush();  
        pw.close(); }

我的this方法将文件名和字节块作为参数。任何时候我从服务器获得新的块,这个方法被调用。通过这种方法,我无法在文件中写入所有块。

任何帮助都会受到赞赏。 感谢

2 个答案:

答案 0 :(得分:4)

PrintWriter用于在文件中写入文本,不支持写入原始字节。 FileOutputStream提供您需要的一切:

FileOutputStream os = new FileOutputStream(filePath, true);
os.write(mapBytes);
os.close();

答案 1 :(得分:1)

使用pw.append( bytes );

使用FileOutputStream附加构造函数FileOutputStream(File file, boolean append)

使用构造函数方法可能稍微有点效率,因为文件可以在追加模式下打开,而不必每次都寻求结束。但是,我不确定,所以你应该在你自己的环境中测试一下这对你来说是否重要。

另外,不要忽视kgiannakakis的建议。他是正确的,PrintWriter期望文本而不是二进制数据。