Leitura de Arquivo

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.

[code]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());

}
}
}[/code]

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; }

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”

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.

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

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

laine, leia a minha resposta e a do caio.

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

[quote=“laine”]OLa,
entao o que devo fazer,ja que estou tentando converter em numerico,dados de uma strring?
Obrigado[/quote]

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

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

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…

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.

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: