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 ???
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…