E ai gurizada, bah to com um problema aqui pessoal… tenho uma classe que armazeno dados em um vector… até ai tudo tranquilo, só que eu preciso fazer algo com este vector para que ao sair desta classe e após voltar a ela, precisaria recuperar os dados do vector…
Desde já, valeu gurizada…
package br.com.embrapa.territorio;
import java.io.BufferedReader;
import java.io.FileReader;
import java.text.DecimalFormat;
import java.util.StringTokenizer;
import java.util.Vector;
public class AbreArquivo {
//recebo por parâmetro o caminho do arquivo a ser aberto, o nome digitado para o arquivo
//o diretorio selecionado e o seu tipoDados correspondente ou completo ou incompleto, e a variavel passadaArquivo que me dirá se foi escolhido inserir mais dados a este arquivo
public boolean arquivo(String caminho, String nome, String diretorio, Integer passadaArquivo) {
String linha = null;
Integer iniDados; //armazena o numero da linha que inicia os dados necessários a serem pegos, ou seja, a 1ª cidade
Integer linhaData;//armazeno o numero da linha em que pegarei a data
Integer linhaProcuraColunas;//armazeno o numero da linha em que está o cabeçalho dos campos que terei.Ex: background, preferencial, toleradaI e II, marginal e nao recomendada
Integer i = 0;
Integer indiceData = 0;
Integer indiceCidade = 1;
//concateno o diretorio selecionado, o nome, mais a extensao do arquivo
System.out.println("Recebeu este diretorio: " + diretorio + " e este nome: " + nome);
String novoNome = diretorio + nome + ".txt";
System.out.println("Vai gravar neste novo nome: " + novoNome);
System.out.println("Arquivo que foi carregado: " + caminho);
//crio um vetor de vetor para armazenar os dados
Vector<Vector> vetor = new Vector<Vector>();
//se for a primeira vez que to executando, crio um vetor de vetor
if (passadaArquivo.equals(1)) {
vetor.add(new Vector());
}
try {
FileReader reader = new FileReader(caminho); // Localização do Arquivo
BufferedReader leitor = new BufferedReader(reader);
StringTokenizer st = null;
String cidade; //Armazena a cidade
Double background;
Double preferencial = 0.0;
Double tolerada1 = 0.0;
Double tolerada2 = 0.0;
Double marginal = 0.0;
Double naoRecomendado = 0.0;
Integer recomenda = null;//se recomenda for 1 eh recomendável, se for 2 eh nao recomendável
String data;
//crio estas variáveis setando todas false, para que ao encontrar a linha do arquivo em que estao os campos, procurarei um por um destes,
//os que encontrar seto true
boolean pBackground = false, pPreferencial = false, pTolerada1 = false, pTolerada2 = false, pMarginal = false, pNaoRecomendado = false;
//crio um decimal format para definir apenas uma casa decimal depois da virgula
//para a variavel etr, apos a divisao por 100
DecimalFormat meuFormato = new DecimalFormat("0.00");
GravaArquivo gravar = new GravaArquivo();
Integer j = null;
boolean encontrou = false;
while ((linha = leitor.readLine()) != null) {
//procuro pela linha abaixo, enquanto nao encontrar não entro no proximo if, ou seja, só continuo a execução quando encontrar a linha
if (linha.equals("Tabela cruzada de areas (em KmxKm):")) {
System.out.println("Encontrou");
j = 1;
encontrou = true;
}
if (encontrou == true) {
//entro neste if para pegar a data do arquivo
if (i.equals(j + 2)) {
System.out.println("Conteudo da linha data:" + linha);
//armazeno a data do arquivo
data = linha.substring(26, 31);
System.out.println("Data pega do arquivo: " + data);
vetor.get(indiceData).addElement(data);
// gravar.Gravar(" " + data, novoNome, 1, passadaArquivo);
}
//entro neste if para procurar os campos que terei no arquivo
if (i.equals(j + 4)) {
System.out.println("Conteudo da linha procura colunas" + linha);
// UTILIZA DELIMITADOR " " PARA DIVIDIR OS CAMPOS
st = new StringTokenizer(linha, " ");
String dados = null;
//separo os dados por " ", e procuro na linha os campos presentes
//para cada campo encontrado seto a sua respectiva variavel com true
while (st.hasMoreTokens()) {
dados = st.nextToken();
String recebe = dados;
if (recebe.equals("Background")) {
System.out.println("Encontrei Background");
pBackground = true;
}
if (recebe.equals("Preferencial")) {
System.out.println("Encontrei Preferencial");
pPreferencial = true;
}
if (recebe.equals("I")) {
System.out.println("Encontrei ToleradaI");
pTolerada1 = true;
}
if (recebe.equals("II")) {
System.out.println("Encontrei ToleradaII");
pTolerada2 = true;
}
if (recebe.equals("Marginal")) {
System.out.println("Encontrei Marginal");
pMarginal = true;
}
if (recebe.equals("Não")) {
System.out.println("Encontrei Não Recomendado");
pNaoRecomendado = true;
}
}
}
//entro neste if, se cheguei na parte das cidades e os seus dados
if (i > j + 6) {
System.out.println("Conteudo da linha:" + linha);
//testo se encontrou uma linha vazia, caso tenha encontrado, "testaLinha" recebe true
//saio do if, nao executo os tokens, pois encontrou o fim
boolean testaLinha = linha.isEmpty();
if (testaLinha == true) {
System.out.println("encontrou linha vazia");
break;
}
// UTILIZA DELIMITADOR " " PARA DIVIDIR OS CAMPOS
st = new StringTokenizer(linha, " ");
String dados = null;
//o primeiro dado da linha será a cidade, o próximo é uma "|" que separa a cidade, e para os próximos sempre farei um teste para ver se a sua respectiva
//variavel está true, ou seja, se foi encontrado antes no seu cabeçalho o nome deste campo, se foi trato o dado, senao passo para o seguinte
while (st.hasMoreTokens()) {
vetor.add(new Vector());
dados = st.nextToken();
cidade = dados;
System.out.println("Cidade: " + cidade);
vetor.get(indiceCidade).addElement(cidade);
//esse token e uma | que separa a cidade do resto dos dados no arquivo, por isso nao trato esse dado, e assim vou para o seguinte
dados = st.nextToken();
if (pBackground == true) {
dados = st.nextToken();
background = Double.valueOf(dados);
System.out.println("Background: " + background);
}
if (pPreferencial == true) {
dados = st.nextToken();
preferencial = Double.valueOf(dados);
System.out.println("Preferencial: " + preferencial);
}
if (pTolerada1 == true) {
dados = st.nextToken();
tolerada1 = Double.valueOf(dados);
System.out.println("Tolerada1: " + tolerada1);
}
if (pTolerada2 == true) {
dados = st.nextToken();
tolerada2 = Double.valueOf(dados);
System.out.println("Tolerada2: " + tolerada2);
}
if (pMarginal == true) {
dados = st.nextToken();
marginal = Double.valueOf(dados);
System.out.println("Marginal: " + marginal);
}
if (pNaoRecomendado == true) {
dados = st.nextToken();
naoRecomendado = Double.valueOf(dados);
System.out.println("Nao Recomendado: " + naoRecomendado);
}
//farei as somas, para testar se soma3 e mais de 50% do somaTotal
Double somaTotal = preferencial + tolerada1 + tolerada2 + marginal + naoRecomendado;
System.out.println("Total da cidade deu: " + somaTotal);
Double soma3 = preferencial + tolerada1 + tolerada2;
System.out.println("Soma preferencial e toleradas: " + soma3);
if (pPreferencial == true || pTolerada1 == true || pTolerada2 == true && (pMarginal == true || pNaoRecomendado == true)) {
if (soma3 > (somaTotal / 2)) {
recomenda = 1;
System.out.println("As 3 SÃO mais de 50% do total");
System.out.println("Testou soma3:" + soma3 + " com somaTotal/2: " + (somaTotal / 2));
} else {
recomenda = 2;
System.out.println("As 3 NÃO SÃO mais de 50% do total");
}
vetor.get(indiceCidade).addElement(recomenda);
}
if (pPreferencial == true && pTolerada1 == true && pTolerada2 == true && pMarginal == false && pNaoRecomendado == false) {
recomenda = 1;
vetor.get(indiceCidade).addElement(recomenda);
// gravar.Gravar(cidade + " " + recomenda, novoNome, 2, passadaArquivo);
}
if (pPreferencial == false && pTolerada1 == false && pTolerada2 == false && pMarginal == true && pNaoRecomendado == true) {
recomenda = 2;
vetor.get(indiceCidade).addElement(recomenda);
// gravar.Gravar(cidade + " " + recomenda, novoNome, 2, passadaArquivo);
}
indiceCidade++;
}
} else {
i++;
System.out.println("Entrou no incremento d i");
}
}
}//fim do while
System.out.println("TAMANHO DE LINHAS DO VETOR:" + vetor.size());
for (Vector v : vetor) {
for (Object s : v) {
System.out.println("Isso eh o que tenho atualmente vetor: " + s);
}
}
gravar.Gravar2(novoNome, vetor);
leitor.close();
reader.close();
ArmazenaMatriz armazenaVetor = new ArmazenaMatriz();
armazenaVetor.DadosMatriz(vetor);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
}