2016-09-09 7 views
1

Следующая часть кода пытается ввести символ новой строки в массив байтов и записать массив байтов в файл.Как добавить символ новой строки в массив байтов в Java?

import java.io.*; 
public class WriteBytes { 
    public static void main(String args[]) { 
     byte[] cities = { 'n', 'e', 'w', 'y', 'o', 'r', 'k', '\n', 'd', 'c' }; 
     FileOutputStream outfile = null; 
     try { 
      outfile = new FileOutputStream("newfile.txt"); 
      outfile.write(cities); 
      outfile.close(); 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Содержание NewFile были: newyorkdc

Что я ожидал был:
NewYork
постоянного

Я попытался типаж '\n' к (byte)'\n', но безрезультатно.

Решение: Изменение инициализации массива в

byte[] cities = { 'n', 'e', 'w', 'y', 'o', 'r', 'k', '\r','\n', 'd', 'c' }; 

я использовал Notepad ++, чтобы просмотреть содержимое file.i предположить, что подавил символ новой строки, но принял возврат каретки с последующим сочетанием новой строки.

+3

То, что вы правильно (я перепроверил, запустив этот код локально). Проблема заключается в том, как вы смотрите на результат. –

+0

@ T.J.Crowder: Я не понимал, что вы подразумеваете под тем, как я смотрю на результат. Разве он не должен писать содержимое массива в новой строке после «\ n»? – Chaipau

+2

Я говорю, что ваш код работал правильно, поэтому, если вы считаете, что содержимое вашего файла - 'newyorkdc', вы ошибаетесь. Либо вы смотрите на старый файл, который не был написан этим кодом, или инструмент, на который вы смотрели, спрятал '\ n' от вас. Когда я запускал ваш код, немодифицированный, я получил файл с байтами '6e 65 77 79 6f 72 6b 0a 64 63' в нем. Обратите внимание, что 8-й байт является новой строкой ('0a'). Когда я делаю 'cat newfile.txt', я вижу новую строку в результате (я использую \ * nix). Код в порядке. –

ответ

3

Новая линия характер ОС зависит, вы должны получить его вызов System.getProperty («line.separator»)

Или лучше, если вы пишете текстовый файл, вы должны использовать BufferedWriter, который имеет метод Newline() для записи разделителя строк независимо от ОС

1

Вы можете подтвердить, что это работает, читая и распечатывая файл.

import java.io.*; 


public class Main { 
    public static void main(String args[]) { 
     String filename = "newfile.txt"; 
     byte[] cities = {'n', 'e', 'w', 'y', 'o', 'r', 'k', '\n', 'd', 'c'}; 
     FileOutputStream outfile = null; 
     try { 
      outfile = new FileOutputStream(filename); 
      outfile.write(cities); 
      outfile.close(); 

      BufferedReader in = new BufferedReader(new FileReader(filename)); 
      String line; 
      while ((line = in.readLine()) != null) { 
       System.out.println(line); 
      } 
      in.close(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     byte[] cities2 = {'n', 'e', 'w', 'y', 'o', 'r', 'k', 'd', 'c'}; 
     outfile = null; 
     try { 
      outfile = new FileOutputStream(filename); 
      outfile.write(cities2); 
      outfile.close(); 

      BufferedReader in = new BufferedReader(new FileReader(filename)); 
      String line; 
      while ((line = in.readLine()) != null) { 
       System.out.println(line); 
      } 
      in.close(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 


    } 
} 

Тест

newyork 
dc 
newyorkdc