2012-12-21 2 views
0

Я пытаюсь создать класс, который берет информацию из графического интерфейса, что сохраняет его в текстовом файле, который я использую в качестве моей «базы данных», но по какой-либо причине объект PrintWriter не напишите новые данные в файле. вот мой кодсбой при сохранении данных в текстовом файле

import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.PrintWriter; 
import java.util.Scanner; 

public class IO { 

    File f = new File("DB.txt"); 
    PrintWriter write; 
    Scanner input; 
    String[][] data; 
    String nameToSearch; 

    // search constructor 
    public IO(String name) { 
     super(); 
     nameToSearch = name; 
     try { 
      input = new Scanner(f); 
     } catch (FileNotFoundException e) { 
      System.out.println("File not found please restart the program"); 
     } 
     data = new String[linesCounter()][2]; 
     for (int i = 0; i < linesCounter(); i++) { 
      data[i][0] = input.nextLine(); 
      data[i][1] = input.nextLine(); 
     } 
    } 

    public IO(String name, String number) { 
     try { 
      write = new PrintWriter(new FileWriter(f, true)); 
     } catch (IOException e) { 
      System.out.println("Error"); 
     } 
     write.println(name); 
     write.println(number); 
    } 

    int linesCounter() { 
     try { 
      input = new Scanner(f); 
     } catch (FileNotFoundException e) { 
      System.out.println("File not found please restart the program"); 
     } 
     int counter = 0; 
     while (input.hasNext()) { 
      input.nextLine(); 
      counter++; 
     } 
     return counter/2; 
    } 

    int contactFinder() { 
     for (int i = 0; i < linesCounter(); i++) 
      if (data[i][0].equalsIgnoreCase(nameToSearch)) 
       return i; 
     return -1; 
    } 

    String nameGetter() { 
     return data[contactFinder()][0]; 
    } 

    String numGetter() { 
     return data[contactFinder()][1]; 
    } 

} 
+0

Это может быть файл, который он пишет, не там, где вы думаете. Распечатайте файл 'file.getAbsolutePath()' и посмотрим, правильно ли это – Bohemian

ответ

4

вам нужно закрыть PrintWriter после завершения записи в файл с помощью printwriter.close()

try { 
      write = new PrintWriter(new FileWriter(f, true)); 
       write.println(name); 
       write.println(number); 
       write.close(); 
     } catch (IOException e) { 
      System.out.println("Error"); 
     } 

    } 

EDIT: Для вашего NoSuchElement Excepion, вы должны проверить, есть ли nextline в файле перед вызовом Scanner.nextline() с использованием Scanner.hasNextLine().

for (int i = 0; i < linesCounter(); i++) { 
     if(input.hasNextLine()){ 
     data[i][0] = input.nextLine(); 
     data[i][3] = input.nextLine(); 
    } 
    } 
+0

Нет, если оно было изменено, и это в этом примере. – nullpotent

+4

Нет @CBredlow, close() будет автоматически сбрасываться. – ignis

+1

Такие инструменты, как FindBugs (http://findbugs.sourceforge.net/), указывали бы на проблему. – MrSmith42

0

Возможно, PrintWriter никогда не покраснел. Вы можете сделать это вручную с помощью

write.flush(); 

Это гарантирует, что буфер будет записан в файл.

+0

ошибка заключалась в том, что я забыл закрыть printwriter :) спасибо в любом случае :) – user1712638

+0

Я вижу, поэтому закрытие должно также скрыться. Хорошо знать. –

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