Leitura de Arquivo

12 respostas
L

Ola galera,preciso de ajuda....to precisando abrir um arquivo Header,mas nao estou conseguindo.Tenho o seguinte codigo abaixo ate agora,mas esta acusando uma falha,que é a seguinte:

java.lang.NullPointerException
at java.io.Reader.<init>(Reader.java:61)
at java.io.BufferedReader.<init>(BufferedReader.java:76)
at java.io.BufferedReader.<init>(BufferedReader.java:91)
at array4.readMyFile(array4.java:70)
at array4.main(array4.java:20)
Exception in thread "main"

Tem uma linha que marquei com asterisco,o valor que esta sendo impresso é NULL,acho que esse nao deve ser o valor.
Coloquei essa linha so pra ver se acho o erro,mas nao estou conseguindo.
Se puderem me ajudar..agradeco.
Obrigado.

try {
      inReader = new BufferedReader(new FileReader(
          "G:/tiago/Java/JavaProjects/array4/classes/Nutz_Esri.hdr"));
    }
    catch (FileNotFoundException e) {
      System.out.println("Achtung,InFile not found !!!");
      System.exit(1);
    }

      FileReader H_infile = null;
      try {
        FileReader H_Infile = new FileReader(
            "G:/tiago/Java/JavaProjects/array4/classes/Nutz_Esri.hdr ");
      }
      catch (FileNotFoundException ex) {
      }
      System.out.println(H_infile);//****
      BufferedReader H_datain = new BufferedReader(H_infile);

      try {
        line = H_datain.readLine();
      }
      catch (IOException ex1) {
      }
      StringTokenizer Tokens2 = new StringTokenizer(line,"	");

      try {
      outWriter = new PrintWriter(new FileWriter(
          "G:/tiago/Java/JavaProjects/array4/classes/HCopy.txt"));
    }
    catch (FileNotFoundException e) {
      System.out.println("Achtung,Could not open Exit File !!!");
      System.exit(1);
    }
    catch (IOException e) {
      System.err.println(e.getMessage());
      System.exit(1);
    }
    try {
      lineTokens = Tokens2.nextToken();//colums
      H_ncols = Integer.valueOf(lineTokens).intValue();
      System.out.println("N_cols =" + H_ncols);

      lineTokens = Tokens2.nextToken();//rows
      H_nrows = Integer.valueOf(lineTokens).intValue();
      System.out.println("N_rows =" + H_nrows);

      lineTokens = Tokens2.nextToken();//XCorner
      H_XCorner = Double.valueOf(lineTokens).doubleValue();
      System.out.println("N_XCorner =" + H_XCorner);

      lineTokens = Tokens2.nextToken();//YCorner
      H_YCorner = Double.valueOf(lineTokens).doubleValue();
      System.out.println("N_YCorner =" + H_YCorner);

      lineTokens = Tokens2.nextToken();//CellSize
      H_CellSize = Integer.valueOf(lineTokens).intValue();
      System.out.println("CellSize =" + H_CellSize);

      H_Byteorder = lineTokens;//Byteorder
      System.out.println("Byteoder =" + H_Byteorder);

      lineTokens = Tokens2.nextToken();//NodataValue
      H_Nodatavalue = Double.valueOf(lineTokens).doubleValue();
      System.out.println("Nodatavalue =" + H_Nodatavalue);

      inReader.close();
      outWriter.close();
    }
    catch (IOException e)  {
      System.err.println(e.getMessage());
  }
}
}

12 Respostas

louds

FileReader [b]H_infile[/b] = null; try { FileReader [b]H_Infile[/b] = new FileReader( "G:/tiago/Java/JavaProjects/array4/classes/Nutz_Esri.hdr "); } catch (FileNotFoundException ex) { }

Voce está cometendo 2 erros aqui:

1o) Java é uma linguaguem que diferencia maiúscula de minúscula, logo as 2 variaveis que eu coloquei em destaque são diferentes e por isso que a primeira nunca recebe o valor esperado.

2o) Voce não está tratando a exceção de FileNotFoundException, ela ocorre quando o arquivo não é encontrado e não aberto. Trate o erro devidamente.

Seria algo assim (por alto):

FileReader H_infile = null; try { H_infile = new FileReader( "G:/tiago/Java/JavaProjects/array4/classes/Nutz_Esri.hdr "); } catch (FileNotFoundException ex) { System.out.println("não encontrei o arquivo, que pena"); return; }

L

Ola,
fiz as modificacoes,mas os seguintes erros ainda aparecem:
pode me ajudar???
Obrigado

java.lang.NumberFormatException: For input string: “ncols 254;”

at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)

at java.lang.Integer.parseInt(Integer.java:468)

at java.lang.Integer.valueOf(Integer.java:574)

at array4.readMyFile(array4.java:94)



at array4.main(array4.java:20)

Exception in thread “main”

cv1

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/NumberFormatException.html

public class NumberFormatException extends IllegalArgumentException

Thrown to indicate that the application has attempted to convert a string to one of the numeric types, but that the string does not have the appropriate format.

caiofilipini

Vc tá tentando converter pra inteiro uma String que contém caracteres…

L

Ola galera,
o conteudo do arquivo que estou querendo abrir,é o seguinte:

ncols 254
nrows 179
xllcorner 3372500
yllcorner 5359500
cellsize 1000
byteorder MSBFIRST
nodata_value -9999

é um arquivo com extensao .hdr

Que estou fazendo de errado?
Obrigado

cv1

laine, leia a minha resposta e a do caio.

L

OLa,
entao o que devo fazer,ja que estou tentando converter em numerico,dados de uma strring?
Obrigado

aborges

“laine”:
OLa,
entao o que devo fazer,ja que estou tentando converter em numerico,dados de uma strring?
Obrigado

Integer.parteInt("123"); Float.parseFloat("123"); ...

L

Ola Alexandre,
mas em qual parte do meu codigo eu faco isso??
Vc viu o codigo nas msgs acima??
Pode me dizer onde faco a alteracao??
Obrigado

aborges

Existem N maneiras de se fazer isso…

no seu caso pode ser

String linha = "xllcorner 3372500" try{ int valor = Integer.parseInt(linha.split(" ")[1]).intValue(); }catch(NumberFormatException e){ // do something }

Atencao, eh importante colocar o tratamento de erro por causa de casos como esse: byteorder MSBFIRST

Dah uma estudada na API do String e do Integer q fica mais facil de entender…

_fs

Laime, se você ler o reply do caiofilipini, entenderá o que está causando o erro.
Mas eu explico de novo: você quer converter uma String em um inteiro. Mas imagine que esta String contém caracteres que não são números … assim sendo, fica impossível de converte-la para um inteiro.

Então o que você deve fazer é tratar essa String para que só contenha números antes de transforma-la em inteiro.

Você perguntará “Mas como eu faço isso?”
E eu te respondo: entre neste link aqui
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html
Ele contém todos os métodos de uma String, creio que se ler tudo, encontrará algum para fazer o que precisa para tirar a parte com letras e deixar só a parte com números.

dudaskank

Complementando…

Como você provavelmente vai precisar saber o que tem na primeira parte da linha, e depois traduzir o número, você vai precisar:

1- Ler a linha (isso já faz);
2- Separar a linha em dois, onde tem o espaço, com o método split() da classe String que deve ser mais ou menos assim:

// já li a linha aqui
String linhaSeparadaPorEspacos[] = linhaLida.split(" ");

3- Assim que fizer isso, fica no vetor de strings duas entradas, para o caso da linha “ncols 255”: a primeira é “ncols” e a outra “255”.
4- Aí você faz a conversão e guarda em algum lugar isso aí… mas observe que você não poderá usar espaços em branco no lado direito da linha, além do separador.

Falou Laime :slight_smile:

Aliás… Laime é quase Lain, que eu ainda não consegui assistir nenhuma vez na Locomotion :-(… sem contar que eles não estavam colocando legenda, vê se pode… eerrrr… pode ignorar este parágrafo :wink:

Criado 20 de abril de 2004
Ultima resposta 21 de abr. de 2004
Respostas 12
Participantes 7