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
Alguem pode me ajudar
41 Respostas
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;
<pre><code>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
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);
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();
}
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…
Qual programa você está utilizando ?
JBuilderX
Tem um menu em algum lugar que se chama arguments ou parameters, não me lembro se está dentro de builder ou de outro menu, nele você passa o diretório do seu arquivo.
Você também pode testar no DOS. Acredito que seu usuário não vai utilizar o JBuilder.
Falow

Blz…vo tentar achar algo
public static String entradaTeclado() throws IOException
{
int i = 0;
String s = "";
BufferedInputStream bis;
do
{
System.out.println( "Digitando o nome do Arquivo: ");
System.out.println("Ex.: C:\nome_diretorio\nomearquivo";
bis = new BufferedInputStream(System.in);
while((i = bis.read()) != 10 )
{
s += (char) i;
}
if(i == 10)
{
System.out.println( "Nao foi digitado nada" );
return s;
}
}while(i != -1 || i != 10);
return s;
}
GELO_SP
O Rogerio,
num entendi isso ai naum,acho que essas linhas nao sao o que to procurando.
Quero que o usuario digite o endereco do arquivo e preciso acessar essa variavel com o caminho do arquivo, e abrir o arquivo atraves dela…como faco isso?
O programa esta em fase de montagem,prototipo,entao nao vou montar interface grafica com o usuario ainda,quero que ele digite o endereco naquela janela de erros,onde eles aparecem ao compilar o programa.To usando o JBuilderX.
Espero resposta…
Obrigado
Bom... C ainda nao tem interface grafica pq vc nao faz assim:
public class Blablabla{
public static void main(String args[]){
new Blablabla(args[0]);
}
public Blablabla(String caminho){
File file = new File(caminho);
}
}
java Blablabla "caminho do arquivo"
O Alexandre…
num sei onde plicar isso no meu programa…vc pode me ajudar a modificar o programa…pq nao to conseguindo!!!
Obrigado
Onde esta seu programa ??
O programa ta ai…tem uma linha onde ta escrito:
G:/tiago/Java/JavaProjects/array4/classes/Nutz_Esri.flt
isso dai tem que cair fora,pois o usuario é que vai selecionar o arquivo…
da um a olhada ai e ve o que tenho que fazer…se vc pode me ajudar.
Obrigado
[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;
<pre><code>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
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);
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();
}
a alternativa do aborges já foi postada anteriormente pelo dgouvea.
Para utilizar esta opção, como vc disse ainda estar em uma fase de prototipação e não julga necessária a interação com o usuário, pode passar o nome do arquivo como parâmetro na hora de executar a classe, rodando via DOS, por exemplo. Ou como já foi citado, dá uma olhada onde na sua ferramenta pode passar os parâmetros para a classe
Para colocar seu codigo identado digite como se segue as linhas abaixo:
clique duas vezes em Code e enter os dois Codes que aparecerem vc coloca o seu codigo java.
public static void main(String[] args) throws IOException {
System.out.println( "
Entre com diretorio e o nome do arquivo :" );
try
{
BufferedReader br = new BufferedReader(
new FileReader( System.in ));
/* Pega o conteudo digitado*/
if( ( s = br.readLine() ) != null)
{
System.out.println(s);
/* coloque aqui suas interações com codigos internos e externos a classe e/ou metodos*/
}
catch(IOException e)
{
System.out.println( "Arquivo não pode ser encontrado" );
System.out.println( e.getMessage() );
System.exit(0);
}
br.close();
}
O Rogerio, to fazendo o seguinte:
Criei um ainterface grafica com o usuario,mas estou tendo um problema,talvez vc possa me ajudar ao dar uma olhada no codigo…marquei com interrrogacao de onde ate onde estou tendo duvidas…
Obrigado
[import <a href="http://java.io">java.io</a>.<em>;
import java.awt.</em>;
import java.awt.event.<em>;
import javax.swing.</em>;
import javax.swing.filechooser.*;
/*
-
FileChooserDemo.java is a 1.4 application that uses these files:
-
images/Open16.gif
-
images/Save16.gif */ public class FileChooserDemo extends JPanel implements ActionListener { static private final String newline = " "; JButton openButton, saveButton; JTextArea log; JFileChooser fc; BufferedReader inReader = null; DataInputStream data = null; private InputStream fis; public FileChooserDemo() { super(new BorderLayout());
//Create the log first, because the action listeners //need to refer to it. log = new JTextArea(5,20); log.setMargin(new Insets(5,5,5,5)); log.setEditable(false); JScrollPane logScrollPane = new JScrollPane(log);
//Create a file chooser
fc =new JFileChooser();//Uncomment one of the following lines to try a different //file selection mode. The first allows just directories //to be selected (and, at least in the Java look and feel, //shown). The second allows both files and directories //to be selected. If you leave these lines commented out, //then the default mode (FILES_ONLY) will be used. // <a href="//fc.setFileSelectionMode">//fc.setFileSelectionMode</a>(JFileChooser.DIRECTORIES_ONLY); <a href="//fc.setFileSelectionMode">//fc.setFileSelectionMode</a>(JFileChooser.FILES_AND_DIRECTORIES);
//Create the open button. We use the image from the JLF //Graphics Repository (but we extracted it from the jar). openButton = new JButton(“Open a File…”, createImageIcon(“images/Open16.gif”)); openButton.addActionListener(this);
//Create the save button. We use the image from the JLF //Graphics Repository (but we extracted it from the jar). saveButton = new JButton(“Save a File…”, createImageIcon(“images/Save16.gif”)); saveButton.addActionListener(this);
//For layout purposes, put the buttons in a separate panel JPanel buttonPanel = new JPanel(); //use FlowLayout buttonPanel.add(openButton); buttonPanel.add(saveButton);
//Add the buttons and the log to this panel. add(buttonPanel, BorderLayout.PAGE_START); add(logScrollPane, BorderLayout.CENTER); }
public void actionPerformed(ActionEvent e) {
int n_rows = 179;
int n_cols = 254;
double[][] points = new double[n_rows][n_cols];
//Handle open button action.
if (e.getSource() == openButton) {
int returnVal = fc.showOpenDialog(FileChooserDemo.this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = fc.getSelectedFile();
?? //This is where a real application would open the file.
try {
FileInputStream fis = new FileInputStream(file.getName());
}
catch (FileNotFoundException ex) {
}
BufferedInputStream bis = new BufferedInputStream(fis);
data = new DataInputStream(bis);
log.append("Opening: " + file.getName() + "." + newline);
for (int y = 0; y < n_cols; y++) {
for (int x = 0; x < n_rows; x++)
{
try{
points[x][y] = (double) data.readFloat();
log.append("Input x : " + x + " ;" + " y : " + y + " ->" +
" Value : " + (float)points[x][y]);
}catch(IOException a) {
?? log.append("Open command ERROR." + newline);
}
}][/code]
Laine,
evite duplicar mensagens em tópicos diferentes. Por isso eu apaguei o seu último tópico criado, ok?
[]s
p.s.: acho que todos os seus problemas poderiam ser resolvidos com uma rápida consulta à documentação da API: http://java.sun.com/j2se/1.4.2/docs/api/
Ola galera,
essa é uma parte do codigo,que to fazendo,mas ta dando um erro…seguinte:
o programa roda blz ate a linha 100,onde marquei,mas dai pra frente ele pula pra linha 105,ele nao compila as linhas intermediarias…eu to fazendo algo errado ali no meio,ou acima da linha 100…alguma passagem de parametro ilegal ou algo do tipo…c puderem me ajudar.
Obrigado
if (e.getSource() == openButton) {
int returnVal = fc.showOpenDialog(FileChooserDemo.this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = fc.getSelectedFile();
//This is where a real application would open the file.
try {
FileInputStream fis = new FileInputStream(file.getName());
}
catch (FileNotFoundException ex) {
}
BufferedInputStream bis = new BufferedInputStream(fis);
data = new DataInputStream(bis);
log.append("Opening: " + file.getName() + "." + newline);
for (int y = 0; y < n_cols; y++) {
for (int x = 0; x < n_rows; x++)
{
100 try{
points[x][y] = (double) data.readFloat();
log.append("Input x : " + x + " ;" + " y : " + y + " ->" +
" Value : " + (float)points[x][y]);
}catch(IOException a) {
105 log.append("Open command ERROR." + newline);
}
}
}
Sem as mensagens de erros jogadas fica meio difícil de descobrir. Mas, chutando, acredito que o comando
log.append("blablabla");
jogue uma java.io.IOException. Por isso, dentro do bloco catch(IOException e) você vai precisar colocar o comando dentro de outro bloco try/catch. Ou então, fazer da maneira mais simples possível:
try{
//blablablabla
}catch(IOException ioe){
ioe.printStackTrace(System.err);
}
Por fim, leia este tópico aqui para aprender como reportar erros no GUJ: http://www.guj.com.br/forum/viewtopic.php?t=6096
A mensagem de erro nao é de complicao e sim uma mensagem de erro que criei para o programa.
Parece que ele nao esta encontrando o arquivo para abrir,entendeu?
Vc sugeriu é que eu faca um IOException,mas onde?
Obrigado
Parece que ele nao esta encontrando o arquivo para abrir,entendeu?
Parece ou não está encontrando o arquivo? Sem o stack trace fica difícil ajudá-lo.
O Daniel,
eu sou iniciante em Java,o que é stack trace??
Obrigado
[O erro é o seguinte:
Open command ERROR.
Onde na verdade deveria aparecer algo assim:
Input X:34 , Y:50
Input X:30 , Y:30
e por ai vai…dentro do arquivo tenho coordenadas,numa matriz 2D]
Ficou mais claro agora??
Obrigado[/quote]
Bom, o seu problema ficou claro. Mas sua causa ainda não. Faça o seguinte. Naquele código, adicione a seguinte linha, após a linha 105:
a.printStackTrace(System.out);
E observe a mensagem de erro que será jogada no seu console. Depois cole esta mensagem de erro aqui.
P.S.: esta tal mensagem de erro que eu estou falando é a tal stack trace.
O daniel,
aconteceu é que o PC travou,o programa travou e nao pude ver nada.
Obrigado