Alguem pode me ajudar

Ola,
como faco para pedir o usuario para entrar com um endereco de um arquivo,por exemplo,c:/documentos/teste.txt e armazenar esse endereco numa variavel e abri o arquivo atraves dessa variavel,que contem o caminho pra chegar no arquivo digitado pelo usuario??
Fico grato se alguem puder me ajudar…
Obrigado.
Tiago

Se for usando Swing, use um JFileChooser:

File f;

// passo o "." para que a janela seja aberta no diretório da aplicação
JFileChooser chooser = new JFileChooser(".");

int opt = chooser.showOpenDialog();

if (opt == JFileChooser.APPROVE_OPTION)
  f = chooser.getSelectedFile();

Você também pode utilizar um FileFilter pra filtrar os arquivos que aparecem na janela, como “somente arquivos da extensão .txt”…dá uma olhadinha na documentação da API:

http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JFileChooser.html

System.out.println(“Enter File Directory:”);
try {
BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));//
String frase = buf.readLine();//
//frase = “G:/tiago/Java/JavaProjects/array4/classes/Nutz_Esri.flt”
File in = new File(frase);
FileInputStream fis = new FileInputStream(in);
BufferedInputStream bis = new BufferedInputStream(fis);
data = new DataInputStream(bis);

Ow,esse é um pedaco do codigo.Tá vendo onde eu escrevi ´frase´,pois é,eu quero salvar o endereco do arquivo digitado pelo usuario nessa variavel,como faco isso??
Obrigado

Se você não estiver usando nada visual como interface com o usuário, utilize os argumentos da classe:

public static void main( String[] args ) {
       String path = args[0]; // pega o primeiro argumento passado para a classe.
        ...
}

Na hora de você rodar a classe:

java Classe "/home/laine/arquivo.txt"

Ok cara,valeu…
eu nao estou usando nenhuma interface grafica com o ousuario,vou tentar mas nao entendi muito bem nao.
Obrigado

O método main() é o método que o JVM vai chamar primeiro quando você executa uma classe com o comando java. Por Exemplo:

java MinhaClasse

Por obrigação o método main tem um argumento do tipo Array de String, por isso obrigatoriamente usamos ele na declaração do método. Exemplo:

public static void main( String[] args )

Sempre que você executar uma classe e depois dela passar argumentos, eles serão recebidos na sua variável args. Exemplo:

java MinhaClasse param1 param2 "param 3"

Pegando o valor dos parâmetros:

public static void main( String[] args ) {
        String valor1 = args[0]; // param1
        String valor2 = args[1]; // param2
        String valor3 = args[2]; // param 3
}

Ficou mais fácil de entender, ou piorou as coisas ???
:slight_smile:

O negocio é o seguinte:
eu nao to conseguindo “linkar” o que vc ta me dizendo com o que estou fazend…esse é o problema.
Obrigado

public class MinhaClasse {

    public static void main( String[] args ) {
        System.out.println("Enter File Directory:" + args[0] );
        try {
            BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
            String frase = buf.readLine();
            frase = args[0];
            File in = new File(frase);
            FileInputStream fis = new FileInputStream(in);
            BufferedInputStream bis = new BufferedInputStream(fis);
            data = new DataInputStream(bis); 
        } catch ( Exception e ) {
            e.printStackTrace();
        }
    }

}

linkou ??

Olha ai o que fiz…qd compilei acusou o seguinte erro apos entrar com o caminho do arquivo:
java.lang.NullPointerException
at array4.readMyFile(array4.java:134)
at array4.main(array4.java:19)
e tbem tive que criar a seguinte linha:
private String[] args;

try {
System.out.println(“Enter File Directory:”);
BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));//
String frase = buf.readLine();//
frase = args[0];
File in = new File(frase);
FileInputStream fis = new FileInputStream(in);
BufferedInputStream bis = new BufferedInputStream(fis);
data = new DataInputStream(bis);

  for (int y = 0; y < n_cols; y++) {
    for (int x = 0; x < n_rows; x++) {
      try {
        points[x][y] = (double) data.readFloat();
        System.out.println("Input x : " + x + " ;" + " y : " + y + " ->" +
                           " Value : " + (float)points[x][y]);
      }

quando você executar o programa, passe o path como argumento:

java MinhaClasse "/home/laiane/arquivo.txt"

Então esse path que você passou para a classe será o valor de args[0] no seu método main();

Como assim passar o path como argumento?

Qual o objetivo do seu código ?? ler um arquivo texto ???
O path ou diretorio do arquivo que você quiser ler, você passa como parâmetro para a classe, como no exemplo que eu dei.

To fazendo igual vc me disse,mas noa sei onde ta o problema,ta acusando o seguinte erro:
java.lang.NullPointerException
at array4.readMyFile(array4.java:129)
at array4.main(array4.java:19)
O objetivo é pedir para o usuario digitar o caminho de onde esta o arquivo e abri-lo…

Exception in thread “main”
System.out.println(“Enter File Directory:”+ args[0]);
try {
BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));//
String frase = buf.readLine();//
frase = args[0];
//“G:/tiago/Java/JavaProjects/array4/classes/Nutz_Esri.flt”
File in = new File(frase);
FileInputStream fis = new FileInputStream(in);
BufferedInputStream bis = new BufferedInputStream(fis);
data = new DataInputStream(bis);

Manda o código completo da sua classe que é melhor, não esquece de colocar entre as tags code.

[import java.io.;
import java.util.
;

public class array4 {
BufferedReader inReader;//hdr
PrintWriter outWriter;//hdr
String line;//hdr

private String[] args;

public array4 () //constructor
{
BufferedReader inReader = null;
PrintWriter outWriter = null;
}

public static void main(String[] args) {

array4 f = new array4();
f.readMyFile();

}

void readMyFile() {
array4 f = new array4();
DataInputStream data = null; //Variables
DataOutputStream data2 = null;
String record = null;
int recCount = 0;
int n_rows, n_cols;
int c;
double dummy;
n_rows = 179; //x
n_cols = 254; //y
double[][] points = new double[n_rows][n_cols]; //2D Array
float a; //receive datas from 2D Arry
byte T[] = new byte[200];
byte vetortext[] = new byte[200];
int bytelidos = 0;

String t;
String line = null,lineTokens;//hdr
int H_ncols;//hdr
int H_nrows;//hdr
double H_XCorner;//hdr
double H_YCorner;//hdr
int H_CellSize;//hdr
String H_Byteorder;//hdr
double H_Nodatavalue;//hdr

System.out.println(“Enter File Directory:” + args[0]);
try {
BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));//
String frase = buf.readLine();//
frase = args[0];
//“G:/tiago/Java/JavaProjects/array4/classes/Nutz_Esri.flt”
File in = new File(frase);
FileInputStream fis = new FileInputStream(in);
BufferedInputStream bis = new BufferedInputStream(fis);
data = new DataInputStream(bis);

  for (int y = 0; y < n_cols; y++) {
    for (int x = 0; x < n_rows; x++) {
      try {
        points[x][y] = (double) data.readFloat();
        System.out.println("Input x : " + x + " ;" + " y : " + y + " ->" +
                           " Value : " + (float)points[x][y]);
      }
      catch (EOFException e) {
        // catch EOF occuring while reading
        System.out.println("ACHTUNG,got an EOFException error! " +
                           e.getMessage());
      }
    }
  }
}

catch (IOException e) {
  // catch io errors from FileInputStream or readLine()
  System.out.println("ACHTUNG, got an IOException error! " + e.getMessage());
}
finally {
  // if the file opened okay, make sure we close it
  if (data != null) {
    try {
      data.close();
    }
    catch
        (IOException ioe) {
    }
  }
}

File out = new File("G:/tiago/Java/JavaProjects/array4/classes/copy2.bin"); //copy-out
FileOutputStream fos = null;
try {
  fos = new FileOutputStream(out);
}
catch (FileNotFoundException ex) {
}
BufferedOutputStream bos = new BufferedOutputStream(fos);

data2 = new DataOutputStream(bos);

try {
  FileWriter saida = new FileWriter(out);
}
catch (IOException ex1) {
  System.out.println("Achtung,problems with creating the output file " +  ex1.getMessage());
}

for (int y = 0; y < n_cols; y++) {
  for (int x = 0; x < n_rows; x++) {

      try {
        a = (float)points[x][y];
        System.out.println("Output x : " + x + " ;" + " y : " + y + " ->" +
                           " Value : " + a);
        data2.writeFloat(a);

      }
      catch (IOException ioe) {
        System.out.println("Achtung,problems with writing data" + ioe.getMessage());

    }
  }

}try{
  data2.close();
}catch(IOException e) {
e.getMessage();
}

}
}

][/code]

Seu maior problema são os comentários. da uma olhada no código, se vc não entender alguma parte, posta que eu te falo:

import java.io.*;
import java.util.*;

public class Array4 {

	BufferedReader inReader;
	PrintWriter outWriter;
	String line;

	public Array4 () {
		BufferedReader inReader = null;
		PrintWriter outWriter = null;
	}

	public static void main(String[] args) {
		Array4 f = new Array4();
		f.readMyFile( args[0] );
	}

	void readMyFile( String path ) {
		Array4 f = new Array4();
		DataInputStream data = null;
		DataOutputStream data2 = null;
		String record = null;
		int recCount = 0;
		int n_rows, n_cols;
		int c;
		double dummy;
		n_rows = 179; 
		n_cols = 254; 
		double[][] points = new double[n_rows][n_cols]; 
		float a; 
		byte T[] = new byte[200];
		byte vetortext[] = new byte[200];
		int bytelidos = 0;

		String t;
		String line = null,lineTokens;
		int H_ncols;
		int H_nrows;
		double H_XCorner;
		double H_YCorner;
		int H_CellSize;
		String H_Byteorder;
		double H_Nodatavalue;
		System.out.println("Enter File Directory:" + path );

		try {
			BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
			String frase = buf.readLine();
			frase = path;
			File in = new File(frase);
			FileInputStream fis = new FileInputStream(in);
			BufferedInputStream bis = new BufferedInputStream(fis);
			data = new DataInputStream(bis);

			for (int y = 0; y < n_cols; y++) {
				for (int x = 0; x < n_rows; x++) {
					try {
						points[x][y] = (double) data.readFloat();
						System.out.println("Input x : " + x + " ;" + " y : " + y + " ->" + " Value : " + (float)points[x][y]);
					} catch (EOFException e) {
						System.out.println("ACHTUNG,got an EOFException error! " +
						e.getMessage());
					}
				}
			}
		} catch (IOException e) {
			System.out.println("ACHTUNG, got an IOException error! " + e.getMessage());
		} finally {
			if (data != null) {
				try {
					data.close();
				} catch (IOException ioe) {

				}
			}
		}
	}

}

ok,fiz as modificacoes que voce fez,mas ta acusando o seguinte erro:

java.lang.ArrayIndexOutOfBoundsException: 0
at array4.main(array4.java:21)
Exception in thread “main”

Num tenho nem ideia do que seja isso…pode me ajudar?

quando você executar a classe coloque o diretório do arquivo que você quer abrir, como parâmetro:

java Array4 "c:\arquivo.txt"

Mas eu quero que o usuario faca isso…nao quero definir,fixar um determinado arquivo…que que fique em aberto e o susario selecoine o arquivo que ele quiser…

detalhe: eu nao estou rodando o programa no ambiente DOS nao,estou compilando ele naquela tela onde aparecem os erros,é ali que quero que o usuario digite o caminho do arquivo…