2013-11-22 2 views
0

Я получаю файл с сервера, а на клиенте я хочу сохранить этот файл в каталоге. Вот код, который делает работу экономии Функции convertToByteArray ФайлаПочему я получаю ненужные данные в файле?

  FileDetails obj1= (FileDetails)object; 
      String str= "A "+obj1.fileExtension+" Received From "+obj1.source; 
      JOptionPane.showMessageDialog(null,str,"Success", WIDTH, null); 
      FileOutputStream saveFile = new FileOutputStream("F:\\Download\\"+obj1.fileExtension); 
      ObjectOutputStream save = new ObjectOutputStream(saveFile); 
      byte[] buf= convertToByteArray(obj1.file); 
      save.write(buf); 
      save.close(); 

является следующим

private byte[] convertToByteArray(File file){  
     try{ 
     FileInputStream fis = new FileInputStream(file); 
     ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
     byte[] buf = new byte[1024]; 

     for (int readNum; (readNum = fis.read(buf)) != -1;) { 
      bos.write(buf, 0, readNum); //no doubt here is 0 
      bos.flush(); 
      System.out.println("read " + readNum + " bytes,"); 
     } 
     byte[] bytes = bos.toByteArray(); 
    return bytes; 
    } catch (IOException ex) { 
     ex.printStackTrace(); 
    } 
     return null; 
    } 

FileDetails является сериализацией объекта, который содержит файл, который отправляет сервер и имя файла в fileExtension , Класс следующий:

public class FileDetails implements Serializable{ 
    public File file; 
    public String fileExtension; 
    public String source; 
    public String destination; 

} 

Теперь проблема в том, что я получаю нежелательные данные в сохраненном файле на стороне клиента. Чтобы проверить, получаю ли я чистые данные с сервера, я распечатал содержимое файла на консоли и получил ожидаемый результат. Но когда я открываю сохраненный файл в указанном каталоге, я получаю некоторые китайские скрипты. Что я могу сделать? Пожалуйста, помогите мне.

+0

Никогда не читайте файлы в байт []. Если вы не можете быть уверены в 100% о размере, вы можете вызвать OutOfMemoryErrors –

+0

Я предполагаю, что файл, который должен быть сохранен, находится в пределах 1 КБ. Если я хочу быть более уверенным, что я могу сделать? Каковы альтернативы массива байтов в данном конкретном случае? – Burro

ответ

2

Часть проблемы, я думаю, глядя в файле в Блокноте. Если я открою файл в другом редакторе, скажем, TextPad, используя двоичный режим, я вижу, что файл начинается с заголовка сериализации. Использование ObjectOutputStream сериализует двоичные данные файла как объекта. То, что я думаю, что вы хотите сделать, это удалить ObjectOutputStream строку и вместо того, чтобы изменить его на следующее:

FileOutputStream saveFile = new FileOutputStream("F:\\Download\\"+obj1.fileExtension); 
//ObjectOutputStream save = new ObjectOutputStream(saveFile); 
byte[] buf= convertToByteArray(obj1.file); 
saveFile.write(buf); 
saveFile.close(); 

Это выпишет байты ТОЛЬКО файла.

+0

Большое спасибо. Исправлен мой код в соответствии с вашим предложением и получил все правильно! :) – Burro

+0

Рад, что у вас это работает! Не могли бы вы принять это как правильный ответ? – mttdbrd

+0

Я отметил это как принятый ответ. Еще раз спасибо, приятель! :) – Burro

Смежные вопросы