2012-06-16 5 views
2

Ascii значение следующей строки 10. Поэтому я попытался это ...Новая линия в FileOutputStream

FileOutputStream os = new FileOutputStream(f, true); 
    os.write(10); // this should get me to next line ? 
    os.write(b); // b is a byte array... 
+0

В чем проблема? – Pablo

+0

его не работает, следующий lne не существует, вместо этого он добавляется от последнего символа в файле – Nil

ответ

6

Вы должны позаботиться управления сепаратором кроссплатформенная линии, это может быть получен разными способами:

  • System.getProperty("line.separator")
  • System.lineSeparator() (только Java7)
  • String.format("%n")

Тогда вы должны позаботиться о использовании DataOutputStream обернутую вокруг FileOutputStream, это потому, что вы будете иметь возможность выбрать множество более эффективных методов, как

  • writeChars(String str)
  • writeBytes(String str)
  • writeUTF(String str)

, так что вы будете использовать наиболее подходящий для вашей ситуации.

Умение также, что запись байтового массива непосредственно в потоке создает двоичные данные, что несколько противоположно использованию строк новой строки (которые вместо этого являются текстом).

+0

Сэр, это я знаю, что если я обернусь с помощью bufferedoutputstream или Dataoutputstream, я могу легко перейти к следующей строке ... просто хотел что если os.write (32); // пространство работает, то почему бы не 10 * – Nil

+0

Какую операционную систему вы используете? – Jack

2

На окнах вы должны использовать 13 и 10 в качестве разделителя строки (CR, LF) - то есть:

os.write(13); 
os.write(10); 

Таким образом, если вы хотите, чтобы ваше приложение, чтобы быть независимым от платформы, вы должны использовать все, что находится в свойство линии.сепаратора, как предлагает Джек.