lectura y escritura en archivo txt

hola amigos estoy haciendo un programita que consiste en un area de texto 3 botonos uno para enviar de un textfield a el area de texto algo como un chat y otro boton para abrir un fichero exixtente y cargarlo en el area de texto el tercer boto es para guardar todo lo que tiene el area de texto en el archivo anterior ahora lo que pasa es que al abrir el archivo lo leo pero la primera linea del archivo no se carga en el area de texto les dejo codigos para pedirles por favor me den un luz les estaria muy agradecido un saludo

import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JLabel;
import javax.swing.JScrollPane;

import java.awt.GridBagLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.GridBagConstraints;
import java.io.*;
import java.util.StringTokenizer;
// programa que abre guarda y edita un archivo txt
public class Nano2 extends JFrame implements ActionListener{
        // instancio los objetos
        JFileChooser fc;
        GridBagConstraints gbc;
        JTextArea area;
        JButton bo1, bo2, bo3;
        JTextField txt;
        JLabel lb1;
        JScrollPane bar;
        File archivo;
       
       
        // constructor por defecto
        public Nano2 (){
                super("Programa con FileChooser");
                setSize(400, 300);
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                setResizable(false);
                setLayout(new GridBagLayout());
               
                gbc = new GridBagConstraints();
                fc = new JFileChooser();
                area = new JTextArea();
                bo1 = new JButton("Enviar");
                bo2 = new JButton("Abrir");
                bo3 = new JButton("Guardar");
                txt = new JTextField(20);
                lb1 = new JLabel("Aplicacion abre y guarda un archivo", JLabel.CENTER);
                bar = new JScrollPane(area);

               
                cp(0,0,4,4,1.0,1.0);
                gbc.fill = GridBagConstraints.BOTH;
                add(bar, gbc);
               
                cp(0,5,4,1,1.0,1.0);
                gbc.fill = GridBagConstraints.HORIZONTAL;
                add(lb1, gbc);
               
                cp(0,7,4,1,1.0,1.0);
                gbc.fill = GridBagConstraints.HORIZONTAL;
                add(txt, gbc);
               
                cp(1,8,1,1,1.0,1.0);
                gbc.fill = GridBagConstraints.NONE;
                add(bo2, gbc);
                bo2.addActionListener(this);
               
                cp(2,8,1,1,1.0,1.0);
                gbc.fill = GridBagConstraints.NONE;
                add(bo1, gbc);
                bo1.addActionListener(this);
               
                cp(3,8,1,1,1.0,1.0);
                gbc.fill = GridBagConstraints.NONE;
                add(bo3, gbc);
                bo3.addActionListener(this);
               
               
        }
        // metodo para asignar las propiedades de mis objetos
        public void cp (int x, int y, int h, int v, double h2, double v2){
               
                gbc.gridx = x;
                gbc.gridy = y;
                gbc.gridwidth = h;
                gbc.gridheight = v;
                gbc.weightx = h2;
                gbc.weighty = v2;
                       
        }
        // metodo para abrir un fichero y despues lo leo
        private void abrir (){
               
                try{
                       
                        FileReader lector = new FileReader(archivo);
                        BufferedReader bufer = new BufferedReader(lector);
                        String linea = "";
                        linea = bufer.readLine();
                       
                        while((linea = bufer.readLine()) != null){
                       
                        area.append(linea + "\n");
                       
                        }
                        bufer.close();
                        lector.close();
                       
                       
                }catch(Exception e){
                       
                e.printStackTrace();
               
                }
        }
        // metodo para guardar en un fichero
        private void guardar (){
               
                try{
                       
                        FileWriter escritura = new FileWriter(archivo, true);
                        BufferedWriter Bsalida = new BufferedWriter(escritura);
                        PrintWriter cp = new PrintWriter(escritura);
                       
                         
                       
                        if(area.getText()!= null){
                                StringTokenizer tk = new StringTokenizer(area.getText(),"\n");
                                cp.println(area.getText());
                        }
                       
                       
                        cp.close();
                        Bsalida.close();
                        escritura.close();
                       
                }catch(Exception e){
                       
                        e.printStackTrace();
                }
        }
       
       
        public void actionPerformed(ActionEvent e){
                String ob2 = e.getActionCommand();
               
                if (ob2.equals("Abrir")){
                        // aqui defino el objeto para abrir el fichero
                        int res = fc.showOpenDialog(null);
                        archivo = fc.getSelectedFile();
                        if (res == fc.APPROVE_OPTION)
               
                        abrir();
                }
                else if (ob2.equals("Enviar")){
                        area.append(txt.getText() + "\n");
                        txt.setText("");
                }
               
                else if (ob2.equals("Guardar")){
                        int sel = fc.showSaveDialog(null);
                        archivo = fc.getSelectedFile();
                        if (sel == fc.APPROVE_OPTION)
                        guardar();
                }
        }
}

public class Nano1 {

       
        public static void main(String[] args) {
               
                Nano2 V = new Nano2();
                V.setVisible(true);
        }

}

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

tengo problemas

hola amigos tengo problemas con las etiquetas aqui les dejo un enlace al codigo fuente de mi programa lo que sucede es que al leer un archivo me toma todas las lineas menos una la primera nunca lee la primera linea y lo segundo es pedirles si me pueden dejar algunos consejitos sobre el codigo como que estoy haciendo mal que deveria cambiar que no se deve hacer etc un saludo y muchas gracias por su colaboracion

http://javamexico.pastebin.com/BghBwkvb

http://javamexico.pastebin.com/L88hc8ZW

Imagen de ezamudio

this.*

Parece que el "this." dentro de los tags de <code/> causaban que no se viera nada...

Y la solución a tu problema es muy sencilla, estás leyendo la primera línea y no haces nada con ella, luego entras a un ciclo para leer las demás lineas. Quita el primer readLine() antes del ciclo.

jaja

hola ezamudio muchas gracias por su colaboracion eso fue una solucion rapida y hacerca de lo del this entonces que hago no lo vuelvo a ocupar pronto arreglaran el fallo??

Gracias

Gracias Rencor por compartir tu código, me ha ayudado mucho para aplicar los buffered + swing.

Un saludo