как записать байты в файл, не перезаписывая его - PullRequest
1 голос
/ 31 декабря 2010

Я получаю куски байтов с сервера, и мне нужно записать их в файл без перезаписи старого чанка.Как я могу это сделать?я делаю это таким образом ..

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 ]

4 голосов
/ 31 декабря 2010

PrintWriter используется для записи текста в файлах и не поддерживает запись необработанных байтов. FileOutputStream предоставляет все необходимое:

FileOutputStream os = new FileOutputStream(filePath, true);
os.write(mapBytes);
os.close();
1 голос
/ 31 декабря 2010

Используйте pw.append( bytes ); или

Использовать конструктор присоединения FileOutputStream FileOutputStream(File file, boolean append)

Использование метода конструктора, вероятно, несколько более эффективно, поскольку файл можно открыть в режиме добавления без необходимости каждый раз искать конец. Однако я не уверен в этом, поэтому вам следует проверить в своей среде, важно ли это для вас.

Кроме того, не игнорируйте советы Кгианнакакиса. Он прав, что PrintWriter ожидает текст, а не двоичные данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...