Errou ao ler um arquivo texto

Bom tarde galera!
Meu problema é o seguinte… estou criando um pequeno programa para armazenar pontos em um plano cartesiano, que primeiramente deve ser armazenado em um vetor, e a após fecha-lo, armazenar em um aquivo .txt.
O meu problema é que quando eu saio do programa duas linhas em branco são add ao aquivo .txt, e quando vou iniciar o programa novamente para carregar o conteúdo a seguinte mensagem aparece:

“Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 1
at brain.util.Ponto.(Ponto.java:24)
at planocartesiano.PlanoCartesianoDAO.recovery(PlanoCartesianoDAO.java:28)
at planocartesiano.ViewPlanoCartesiano.main(ViewPlanoCartesiano.java:13)
Java Result: 1”

Segue arquivo de visualizacao:

package planocartesiano;

import brain.util.Entrada;
import brain.util.Ponto;

public class ViewPlanoCartesiano {

public static void main(String[] args) {

    char opção = ' ';
    String menu;

    ColeçãoDePontos colecao = new PlanoCartesianoDAO().recovery();

    menu = "[1] Cadastrar\n"
            + "[2] Excluir\n"
            + "[3] Editar\n"
            + "[4] Consultar \n"
            + "[5] Listar \n"
            + "[6] Sair do sistema";

    while (opção != '6') {
        opção = Entrada.leiaChar("MENU" + "\n\n" + menu);

        if (opção == '1') {
            new ColeçãoDePontos().addPonto(new Ponto(Entrada.leiaString("Informe o nome que deseja utilizar:"), Entrada.leiaDouble("Informe a coordenada X:"), Entrada.leiaDouble("Informe a coordenada Y:")));
        }
        if (opção == '2') {
        }
        if (opção == '3') {
        }
        if (opção == '4') {
            System.out.println("-------------------------------------");
            System.out.printf("%-10s | %-12s | %-12s |\n", "Nome", "Coordenada X", "Coordenada Y");
        }
        if (opção == '5') {
            System.out.println("-------------------------------------");
            System.out.printf("%-10s | %-12s | %-12s |\n", "Nome", "Coordenada X", "Coordenada Y");
            System.out.println(colecao.getListaDePontos());
        }
    }
    PlanoCartesianoDAO.create(colecao);
}

}


Classe ColecaoDePontos:
package planocartesiano;

import brain.util.Ponto;
import java.util.ArrayList;

public class ColeçãoDePontos {

private ArrayList<Ponto> colecao = new ArrayList<>();

public ColeçãoDePontos() {
}

public ArrayList<Ponto> getColecao() {
    return colecao;
}

public void addPonto(Ponto p) {
    if (buscarPorNome(p.getNome()) == null) {
        this.colecao.add(p);
    }
}

public Ponto buscarPorNome(String nome) {
    Ponto aux = null;
    for (Ponto pnt : colecao) {
        if (pnt.getNome().equals(nome)) {
            aux = pnt;
        }

    }
    return aux;
}

public String getListaDePontos() {
    String result = "";
    for (Ponto pnt : colecao) {
        result += String.format("%-10s | %-12s | %-12s |\n", pnt.getNome(), pnt.obterX(), pnt.obterY());
    }
    return result;
}

public String toString() {
    String result = "";
    for (Ponto pnt : colecao) {
        result += pnt.toString() + "\n";
    }
    return result;
}

}


E o classe DAO:
package planocartesiano;

import brain.util.Arquivo;
import brain.util.Ponto;

public class PlanoCartesianoDAO {

public static void create(ColeçãoDePontos colecao) {
    Arquivo arq = new Arquivo("dados.txt");

    // salvar
    if (arq.abrirEscrita()) {

        arq.escreverLinha(colecao.toString());

        arq.fecharArquivo();
    }
}

public ColeçãoDePontos recovery() {
    ColeçãoDePontos formas = new ColeçãoDePontos();
    Arquivo arq = new Arquivo("dados.txt");

    // carregar os contatos
    if (arq.abrirLeitura()) {
        String linha = "";
        while ((linha = arq.lerLinha()) != null) {
            formas.addPonto(new Ponto(linha));
        }
        arq.fecharArquivo();
    }
    return formas;
}

public void update(ColeçãoDePontos coleção) {
    // salvar a agenda 
    // em qualquer lugar
}

public void delete(ColeçãoDePontos coleção) {
    //
}

}

Poste a classe Ponto. De prefrência entre as tags [code][/code]

Poste a classe Ponto. De prefrência entre as tags [code][/code][/quote]

Ta ai a classe ponto…

[code] package brain.util;

public class Ponto {

private double x;
private double y;
private String nome;

public Ponto() {
    this.nome = null;
    this.x = 0;
    this.y = 0;
}

public Ponto(String nome, double x, double y) {
    this.nome = nome;
    this.x = x;
    this.y = y;
}

public Ponto(String linhaCSV) {
    String[] aux = linhaCSV.split(";");
    this.nome = aux[0];
    this.x = Double.parseDouble(aux[1]);
    this.y = Double.parseDouble(aux[2]);
}

public Ponto(double x, double y) {
    this.nome = null;
    this.x = x;
    this.y = y;
}

public String getNome() {
    return nome;
}

public void setNome(String nome) {
    this.nome = nome;
}

public void lerponto() {
    this.x = Entrada.leiaDouble("Entre com a coordenada X:");
    this.y = Entrada.leiaDouble("Entre com a coordenada Y:");
}

public String obterCoordenadas() {
    String aux;
    aux = ("X= " + this.x + " Y= " + this.y);
    return aux;
}

public void igualarPontos(Ponto ponto2) {
    this.x = ponto2.x;
    this.y = ponto2.y;
}

public double obterDistância(Ponto ponto2) {
    double resultado;
    resultado = Math.sqrt((Math.pow(this.x - ponto2.x, 2)) + (Math.pow(this.y - ponto2.y, 2)));
    return resultado;
}

public double obterX() {
    return this.x;
}

public double obterY() {
    return this.y;
}

public void setX(double x) {
    this.x = x;
}

public void setY(double y) {
    this.y = y;
}

public int quadrante() {
    int quad = 0;
    if (x > 0) {
        if (y > 0) {
            quad = 1;
        } else {
            quad = 4;
        }
    } else {
        if (y > 0) {
            quad = 2;
        } else {
            quad = 3;
        }
    }
    return quad;
}

@Override
public String toString() {
    return this.nome + ";" + this.x + ";" + this.y;
}

}
[/code]

Seu problemaestá aqui:

public Ponto(String linhaCSV) { String[] aux = linhaCSV.split(";"); this.nome = aux[0]; this.x = Double.parseDouble(aux[1]); this.y = Double.parseDouble(aux[2]); }

ArrayIndexOutOfBoundsException ocorre quando você tem um vetor de 10 posições, por exemplo, e tenta acessar a 15º posição. Como ela não existe, você recebe esse erro.

Provavelmente uma das linhasCSV que você está lendo não possui dois ;, gerando um array menos de 3 posições.

Vou dar uma revisada no código e em seguida posto o resultado.

Obrigado até então!