2015-08-14 2 views
2

Я пытаюсь распечатать имена пользователей определенной программы в файл, но PrintWriter ничего не печатает в моем файле. Я пробовал все упомянутое в stackOverFlow, ни один из них не работал.Java: объект PrintWriter не выводит текст в моем файле?

Пользователи Класс

private File usersListFile; 
private PrintWriter usersListPrintWriter; 
private Scanner usersListScanner; 

Конструктор

Users(){ 
    try { 
     this.usersListFile = new File("D:\\Dairy\\usersList.txt"); 
     if(usersListFile.exists()){ 
      this.usersListPrintWriter = new PrintWriter(new BufferedWriter(new FileWriter("D:\\Dairy\\usersList.txt", true))); 
      this.usersListScanner = new Scanner("D:\\Dairy\\usersList.txt"); 
     } 
     else 
      System.err.println("File does not exist !"); 
    } 
    catch(Exception e){ 
     System.err.println("Error: Users Class!");     
    } 
} 

Метод:

public void addToUsersList(String username){ 
     usersListPrintWriter.print(username);   
    } 

Основной метод:

public static void main(String[] args) { 

    Users usersObject = new Users(); 
    usersObject.addToUsersList("USERNAME"); 

    } 

ответ

1

usersListPrintWriter буферизуется, поэтому вам необходимо очистить данные (как упоминал Александрой).

Вам также, вероятно, необходимо будет изменить print на println, поэтому новые пользователи будут выводиться на отдельных строках.

Ваш Scanner не будет работать, поскольку вы сканируете данную строку, а не содержимое файла. Вместо этого используйте new Scanner(this.usersListFile).

Вы также должны повторно использовать File объект на предыдущей строке: new FileWriter(this.usersListFile, true)

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

+0

Ты потрясающий! Мне было интересно, что случилось с моим сканером, спасибо вам большое! –

+0

@EJP Я специально назвал 'usersListPrintWriter', а не' PrintWriter', так как 'usersListPrintWriter' явно создан с помощью BufferedWriter в цепочке. Однако вы правы, подразумевая, что «PrinWriter» также буферизуется, и, как я полагаю, «FileWriter». Изменение ответа. – Andreas

+0

В этом случае было бы лучше сказать, что «оба ответа« PrintWriter »и« BufferedWriter »буферизованы». Переменные не буферизуются. – EJP

1
public void addToUsersList(String username){ 
    usersListPrintWriter.print(username);   
    usersListPrintWriter.flush(); 
} 

Тогда, когда вам не нужно больше ваш PrintWriter, звоните close().

+0

Спасибо. Это сработало отлично! –

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