2014-11-21 2 views
0

У меня есть массив, перечисленных ниже:Дать определенное количество байтов в файле

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

Я попробовал этот код, но это не похоже на работу:

public static byte[] aSnouty = {97, 98, 99, 100, 101, 102, 103, 104, 105, 49, 45, 50, 51, 52, 53}; 

File file = new File(filename); 
FileOutputStream fos = null; 
try { 
    fos = new FileOutputStream(file); 
    do { 
     fos.write(aSnouty); 
    } while(file.length()!=1029); 

} catch(Exception ex) { 
    ex.printStackTrace(); 
} 
+4

Запись 15 байт за один раз никогда не получит файл размером 1029 байт. 15 в 1029 не идет, это невозможно. Если вы хотите остановиться, когда оно прошло * прошлое * 1029 байт, test 'while (file.length() <1029)', в противном случае вам нужно будет добавить еще несколько объяснений того, что должно произойти, и что происходит. – TessellatingHeckler

+3

Не только то, что сказал @TessellatingHeckler, но вы также не ['flush'] (https://docs.oracle.com/javase/8/docs/api/java/io/OutputStream.html#flush--) поток вывода, что означает, что вы не контролируете, когда данные записываются на диск. Это означает, что вызов 'file.length()' не дает вам длину файла с новыми данными. – Powerlord

+0

@Powerlord Должен fos.close(); идти сразу после цикла? – alkis1995

ответ

0

Вот решение, начиная с кода, при условии:

byte[] aSnouty = {97, 98, 99, 100, 101, 102, 103, 104, 105, 49, 45, 50, 51, 52, 53}; 

    File file = new File("C:/users/BXM0121/testTenTwentyNine.txt"); 
    FileOutputStream fos = new FileOutputStream(file); 
    int fileSizeInBytes = (int) file.length(); 
    final int maxFileSize = 1029; 
    try { 
     do { 

      if ((maxFileSize - fileSizeInBytes) < aSnouty.length) 
      { 
       fos.write(Arrays.copyOfRange(aSnouty, 0, maxFileSize-fileSizeInBytes)); 
       break; 
      } 
      fos.write(aSnouty); 
      fileSizeInBytes += aSnouty.length; 
     } while (file.length() != maxFileSize); 

    } catch(Exception ex) { 
     ex.printStackTrace(); 
    } finally{ 
     fos.close(); 
    } 

Edit: я вижу свой комментарий о нормальном распределении и это совершенно другой зверь. Я не кодировал это.

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