2015-01-11 2 views
1

Всякий раз, когда я скомпилирую свой проект, я получаю входное сообщение. Нажимая OK, он сохраняет мой «пароль» в txt-файле. После повторения вышеуказанного старый «пароль» изменился с новым, на котором я напечатал. Как я могу избежать этого? Я пробовал pw.println("\r\n"+x);, pw.println("\n"+x); и такой, но мне не удалось заставить его работать, как я хочу.Java, записывайте файл, сохраняя старые входы и добавляя новые входы в новые строки.

Вот мой код:

try (PrintWriter pw = new PrintWriter("number.txt")) { 
     int x = readInt(); 
     pw.println(x); 
     pw.close(); 
    } 
    catch(IOException e) { 
     System.out.println("Problem with the output file"); 
    } 

и мой метод readInt (в случае, если вы хотите знать):

public static int readInt() { 
    String s = JOptionPane.showInputDialog("Enter your password"); 
    int x = Integer.parseInt(s); 
    return x; 
} 
+0

то, что вы НАСТОЯТЕЛЬНО ищете, является логической структурой, такой как log4j: http://www.tutorialspoint.com/log4j/log4j_sample_program.htm. О, и кроме того: протоколирование паролей очень проблематично - это может привести к тому, что вы когда-нибудь столкнетесь с юридическими проблемами. НИКОГДА не записывайте пароли. – specializt

+0

Это только для университетского проекта, было предложено зарегистрировать пароль игрока в txt-файле, поэтому не беспокойтесь об этом =) Я проверю материал, который вы предоставили btw, спасибо большое! –

ответ

0

PrintWriter обрезает существующий файл на нулевые байты (т. Е. Его пуст).

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

PrintWriter pw = new PrintWriter(new FileWriter("number.txt", true)); 
0

Ваша проблема, если я правильно, что вы перезаписать файл каждый раз , Попробуйте прочитать содержимое файла, поместив его в строку, добавив новый пароль в конец этого и затем записывая полученную строку в файл txt.

2

Вам необходимо открыть PrintWriter в режиме добавления. Чтобы быть более точным, вам нужно обернуть OutputStream или Writer, который поддерживает этот режим. Вы можете использовать

PrintWriter pw = new PrintWriter(new FileWriter("number.txt", true)); 
//               ^^^^ 

или так it will internally use FileOutputStream вы можете пропустить один уровень инкапсуляции и использовать непосредственно

PrintWriter pw = new PrintWriter(new FileOutputStream("number.txt", true)) 

, но это не изменится.


BTW, так как вы используете try-with-resources вам не нужно явно вызывать pw.close(). Он будет вызываться автоматически.

+0

Компилятор говорит: «Не найдено подходящего конструктора для PrintWriter ...» –

+0

@NikosPappas Это странно. Я не уверен, с какой версии Java этот конструктор доступен (я подозреваю, что с того места, где был добавлен Writers ware), но он доступен даже в Java 5 http://docs.oracle.com/javase/1.5.0/docs/api/ Java/IO/PrintWriter.html # PrintWriter (java.io.OutputStream). Не могли бы вы показать, что вы его используете (ссылка на pastebin.com, содержащая пример кода, будет прекрасной). – Pshemo

+0

Странно, но когда я увидел ваш ответ, он показывал «PrintWriter pw = new PrintWriter (« number.txt », true)) // мне ... теперь я вижу новый FileOutputStream, но это правильно или davids вместо FileWriter ? –

0

Pass верно в конструктор объекта писателя, он будет добавлять данные в конец файла каждый раз, когда вы вызываете метод записи.

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