2014-11-22 3 views
0

Я студент java, и этот пример из учебника. Проблема, с которой я столкнулась, это line.separator, не помещая запись на следующей строке. Результат, на самом деле, это то, что он делает. Он помещает записи в одну строку. Книга показывает выход так, как он должен быть. Я копирую и вставляю код в Eclipse и Notepad и запускаю его. Я получаю тот же результат в обоих направлениях. Спасибо заранее за любую помощь.Ошибка System.getProperty (line.separator)

import java.nio.file.*; 
import java.io.*; 
import java.nio.channels.FileChannel; 
import java.nio.ByteBuffer; 
import static java.nio.file.StandardOpenOption.*; 
import java.util.Scanner; 

public class CreateEmployeesRandomFile { 
    public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    Path file = Paths.get("C:\\EJava\\Employee.txt"); 

    String s = "000, ,00.00" + System.getProperty("line.separator"); 
    final int RECSIZE = s.length(); 
    FileChannel fc = null; 
    String delimiter = ","; 
    String idString; 
    int id; 
    String name; 
    String payRate; 
    final String QUIT = "999"; 
    try { 
     fc = (FileChannel) Files.newByteChannel(file, CREATE, WRITE); 
     System.out.print("Enter employee ID number >> "); 
     idString = input.nextLine(); 
     while (!(idString.equals(QUIT))) { 
      id = Integer.parseInt(idString); 
      System.out.print("Enter name for employee #" + id + " >> "); 
      name = input.nextLine(); 
      System.out.print("Enter pay rate >> "); 
      payRate = input.nextLine(); 
      s = idString + delimiter + name + delimiter + payRate 
        + System.getProperty("line.separator"); 
      byte[] data = s.getBytes(); 
      ByteBuffer buffer = ByteBuffer.wrap(data); 
      fc.position(id * RECSIZE); 
      fc.write(buffer); 
      System.out.print("Enter next ID number or " + QUIT 
        + " to quit >> "); 
      idString = input.nextLine(); 
     } 
     fc.close(); 
    } catch (Exception e) { 
     System.out.println("Error message: " + e); 
    } 
} 

}

Результат: 000,, 00,00 001, Грег Look002, Джон Smit003, Фред Кремень, 2541,02

000,, 00,00 000,, 00,00 т.д.

ответ

0

попробуйте изменить эту строку.

fc = (FileChannel) Files.newByteChannel(file, CREATE, WRITE); 

в

fc = (FileChannel) Files.newByteChannel(file, READ, WRITE); 
+0

изменил его, и это не исправить. – Blazto

+0

Это зависит от ОС. Разделитель строк есть; возможно, проблема связана с программой, которую вы используете для просмотра текста: Windows Notepad. Каждая другая программа в мире будет принимать любой из трех наиболее распространенных разделителей строк: «\ n» (только для перевода строки), «\ r» (только возврат каретки) или «\ r \ n» (возврат каретки + перевод строки). Но «Блокнот» распознает только «\ r \ n», традиционный разделитель строк для систем DOS/Windows. Попробуйте использовать что-то другое, кроме Блокнота, чтобы просмотреть текст и посмотреть, работает ли он. –

+0

Я пробовал на NotePad ++ и Eclipse. – Blazto

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