2011-05-06 3 views
4

Я создаю небольшую программу, которая сохраняет значение int в текстовый файл, сохраняет его и загружает при повторном запуске программы. Теперь, мне нужно больше 3 булевых быть сохранены в текстовом файле, я пишу вещи в файл с n не будет работать, не переходя к новой строке

public Formatter x; 

x.format("%s", "" + m.getPoints() + "\n"); 

Всякий раз, когда я хочу, чтобы перейти на новую строку в моем текстовом файле, с \ п, оно не перейдите в новую строку, он просто напишет его непосредственно за значением int. Я пытался делать как

 x.format("%s", "" + m.getPoints() + "\n"); 
    x.format("%s", "" + m.getStoreItem1Bought() + "\n"); 

и

x.format("%s%s", "" + m.getPoints() + "\n", "" + m.getBought() + "\n"); 

, но, как будет просто написать логическое непосредственно за значение INT, без запуска новой линии. Любая помощь по этому поводу?

Я использую Windows 7 Ultimate 64 бит, а мой текстовый редактор Eclipse, я запускаю весь код с Eclipse.

+0

Вы используете систему Windows? '\ N' будет вставлять строку, а не системный разделитель строк. В Windows это возврат каретки, за которым следует строка перевода строки.Это может показаться, что между –

+0

ничего нет. Правильно, но существует только несколько программ, требующих '\ r \ n', и все, с чем я столкнулся, показывает одиночный' \ n' как полеобразный символ (что не является поведением описано). – maaartinus

+0

Обновлен OP. – Stan

ответ

6

Более конкретно, я бы рекомендовал использовать:

x.format("%d%n%s%n", m.getPoints(), m.getStoreItem1Bought()); 
+0

Еще лучше: 'x.format ((Local) (null),"% d% n% s% n ", m.getPoints(), m.getStoreItem1Bought());'. Первый аргумент «null» предотвратит применение какой-либо локализации. –

+0

Это сработало, поместило его на новую строку, спасибо всем вашим помощникам. – Stan

3

Попробуйте использовать %n вместо \n при использовании формата. Подробнее об этом см. На странице Formatter API и найдите эту страницу для «разделителя строк», и вы увидите.

+1

Что выдает 8% nfalse% n в текстовом файле, не работает. – Stan

+0

Мой плохой. Я думал, что вы используете вариант класса Formatter, который используется с методом printf PrintStream. –

+1

Это работает только для '% n' в строковой части формата метода Formatter.format, а не в аргументах. – maaartinus

4

Используйте вместо этого:

public static String newline = System.getProperty("line.separator"); 

Оба этой опции работы. Ваша проблема заключается в том, как вы форматировать вывод:

System.out.format("%s" + newline + "%s" + newline, "test1", "test2"); 
System.out.format("%s%n%s", "test1", "test2"); 

Выход:

test1 
test2 
test1 
test2 
+0

То, что вышло 3nullfalsenull в мой текстовый файл, тоже не работает. – Stan

+0

Это действительно должно сработать. Если вы не делаете вывод в инициализации класса до того, как будет присвоен символ 'newline'. – maaartinus

+0

@Stan проверить, как его использовать. Я обновил ответ – Aleadam

0

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

В любом случае, я уверен, что 1. вы используете окна и 2. что редактор (я ставлю на блокнот), который вы используете, реагирует только на \ r \ n, поскольку это правильная новая строка для Windows. Чтобы исправить это, НЕ НЕОБХОДИМО кодировать \ r \ n в коде, но вместо этого используйте% n и правильно используйте функцию printf (т. Е. Не объединяйте строку вместе!).

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

String newline = System.getProperty("line.separator"); 
x.format("%s", "" + m.getPoints() + newline); 

будет работать.

1

Нет проблем здесь:

System.out.format ("first: %s%s", "" + x + "\n", "" + y + "\n"); 

В то время как я предпочитаю, чтобы интегрировать \ п в формате строки, а не значения:

System.out.format ("second: %s\n%s\n", x, y); 

Использование Formatter.format работает одинаково.

+0

Не используйте \ n - это только надежно работает на системах Linux (и современных Mac). % n или System.getProperty («line.separator») - это правильная версия. Не нужно писать неуправляемый код, если решение вряд ли будет работать. – Voo

+0

Зависит от того, что вам нравится делать с продуктом. Если вам нужен «\ n», используйте «\ n», если вам нужен переносимый вывод, используйте «% n». Современные редакторы (кроме Notepad, который не является современным) часто могут обрабатывать обе формы ввода. –