2012-02-02 2 views
0

Я изучаю java, и я создал простую программу, которая просто считывает значение из JTextField и сохраняет его в файл с помощью FileOutputStream.
Мой вопрос: нормально ли данные быть нечитаемыми (используя ту же программу с FileInputStream) после перезапуска? Если я прочитал его без прерывания программы, он отлично работает.
Как я могу записать данные в файл permment?
Редактировать:
Кажется, файл очищается при запуске программы.
Вот код:Данные, записанные с использованием FileOutputStream, исчезают после перезапуска программы

public class Test extends JFrame 
{ 
JTextField field; 
JButton write; 
JButton read; 
File file; 
FileOutputStream fOut; 
FileInputStream fIn; 
int x; 

Test() throws IOException 
{ 
    setAlwaysOnTop(true); 
    setLayout(new BorderLayout()); 
    field = new JTextField(4); 
    write = new JButton("Write"); 
    read = new JButton("Read"); 
    file = new File("save.txt"); 
    if(!file.exists()) 
    { 
     file.createNewFile(); 
    } 
    fOut = new FileOutputStream(file); 
    fIn = new FileInputStream(file); 
    add(field); 
    add(write, BorderLayout.LINE_START); 
    add(read, BorderLayout.LINE_END); 
    setVisible(true); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    setSize(160,60); 
    write.addActionListener(new ActionListener() 
    { 
     public void actionPerformed(ActionEvent e) 
     { 
      x = Integer.parseInt(field.getText()); 
      try 
      { 
       fOut.write(x); 
       System.out.println("Saving completed."); 
       fOut.flush(); 
      } 
      catch(Exception exc) 
      { 
       System.out.println("Saving failed."); 
      } 

     } 
    }); 
    read.addActionListener(new ActionListener() 
    { 
     public void actionPerformed(ActionEvent e) 
     { 
      try 
      { 
       x = fIn.read(); 
       fIn.close(); 
      } 
      catch(Exception exc) 
      { 
       System.out.println("Reading failed."); 
      } 
     } 
    }); 
} 
public static void main(String[] args) throws IOException 
{ 
    new Test(); 
} 
} 
+1

Можно ли увидеть какой-нибудь код? – Marcelo

+0

Вы открыли файл и видите там какие-либо данные? Данные должны быть там, он не должен удаляться при перезагрузке. Без кода трудно сказать, что происходит. – kosa

+0

fOut = new FileOutputStream (файл); становится fOut = new FileOutputStream (файл, true); – tartak

ответ

0

fOut = new FileOutputStream(file); это будет перезаписывать файл, вам нужно использовать fOut = new FileOutputStream(file, true); для добавления к нему.

+0

Тогда как это сделать, если я хочу, чтобы в файле было только одно значение? Я не хочу, чтобы они складывались. – Boblob

+0

Открыть, прочитать и закрыть файл с помощью «FileInputStream», а затем снова открыть его с помощью «FileOutputStream» (без добавления). Вы также можете открыть его только для записи, когда вы на самом деле это сделаете. – Viruzzo

1

Убедитесь, что вы flush() и close() потоки.

+3

Простое закрытие должно заподлицо. –

+0

@Jon Skeet Но не промывка перед закрытием может привести к некорректной обработке ошибок (с некоторыми декораторами при определенных условиях). –

+0

@ TomHawtin-tackline: С точки зрения наличия IOException, но затем вы пытаетесь закрыть, что в свою очередь заставляет флеш или что-то еще? –

0

вот некоторый код, чтобы открыть файл для записи. Обратите внимание на параметр «истинный», что означает, что мы добавляем текст в конец, а не добавляем его в начало. То же самое касается FileOutputStream .. Если вы не укажете второй аргумент (true), вы получите перезаписанный файл.

try{ 
    // Create file 
    FileWriter fstream = new FileWriter("out.txt",true); 
    BufferedWriter out = new BufferedWriter(fstream); 
    out.write("Hello Java"); 
    //Close the output stream 
    out.close(); 
    }catch (IOException e){//Catch exception if any 
    System.err.println("Error: " + e.getMessage()); 
    } 
+2

Обратите внимание, что catching Exception обычно не является хорошей идеей, а 'close()' обычно должен быть в конечном блоке. О, и это будет использовать стандартную кодировку платформы, которая, как правило, тоже плохая идея. –

+0

true, fixed exception – tartak

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