Nova duvida IO

26 respostas
magocebolinha

Galera

Bom ja estou conseguindo fazer algumas coisas com a classe IO, mas tenho um trecho de código aqui que mostra um método na qual tenho uma duvida…

private void criaArquivoTexto(String nomArq, int resultado)throws IOException {
	         
	         FileWriter fw = new FileWriter(nomArq);
	         BufferedWriter bw = new BufferedWriter(fw);
	         bw.write("O Resultado desta operação é "+ resultado);
	         bw.close();
	         System.out.println("Arquivo de resultado criado com sucesso!");
         }
     }

Neste trecho como posso especificar o caminho onde será salvo o arquivo em questão? consultei em alguns lugares e vi que criando um objeto da classe File talvez consigo, só não consegui assimilar a lógica de como fazer isso ja que n achei exemplos praticos! :lol:

26 Respostas

rogelgarcia
new FileWriter(new File("/path/do/arquivo"))
Trebloc

Criando um arquivo:

String caminhoRelativo = "/teste/arquivo.txt"; File file = new File(caminhoRelativo); if (!file.exists) // o arquivo não existe file.createNewFile(); // cria o arquivo

ou

String caminhoAbsoluto = "C:/Teste/arquivo.txt"; File file = new File(caminhoAbsoluto); if (!file.exists) // o arquivo não existe file.createNewFile(); // cria o arquivo

:wink:

Note que o arquivo estará vazio.

Adicionalmente, você pode usar file.delete() caso o arquivo exista e você queira removê-lo e criar um novo com mesmo nome.

magocebolinha

ok mas neste exemplo eu usaria o objeto file com o método write? como faço para atribuir o conteudo gerado para o arquivo e ainda especificar que el vá para este caminho??

magocebolinha

alguém sabe?

rogelgarcia

FileWriter fw = new FileWriter(new File("/path/do/arquivo")) ; BufferedWriter bw = new BufferedWriter(fw); bw.write("O Resultado desta operação é "+ resultado); bw.close(); System.out.println("Arquivo de resultado criado com sucesso!");

Mais ou menos isso

magocebolinha

ah tah… vou tentar… valew!

magocebolinha

Então… fiz outro exemplo de codigo que funcionava normalmente mas sem que eu escolhesse o destino onde o mesmo seria salvo… agora que eu alterei ele gera erro…

import java.io.*;
import javax.swing.*;


class CriarArquivoTexto {
	
	public static void main (String args[]){
		
		CriarArquivoTexto arqTxt = new CriarArquivoTexto();
		
		try {
			arqTxt.criaArquivoTexto("ArquivoTextoUm.txt");
			arqTxt.criaArquivoTexto("ArquivoTextoDois.txt");
		    arqTxt.criaArquivoTexto("ArquivoTextoTres.txt");
	    } 
	    catch (IOException ioe) {
		    JOptionPane.showMessageDialog(
		    null,
                    "Mensagem",
		    "Erro na criação do arquivo",
		     JOptionPane.PLAIN_MESSAGE
		    );
    	}
     }
	
   	 private void criaArquivoTexto(String nomArq) throws IOException {
	   	 FileWriter fw = new FileWriter(new File ("C:\teste de criação de arquivos")); 
	   	 BufferedWriter bw = new BufferedWriter(fw);
	   	 
	   	       for (int i = 1;i<= 20; i++) {
		   	       if(i == 1) {
			   	       bw.write("Este é o arquivo " + nomArq + "\n");
			   	       bw.newLine();
		   	       }
		   	       bw.write("Esta é a linha de número "+i);
		   	       bw.newLine();
	   	       }
	   	       
	   	       bw.close();
	   	       System.out.println("Arquivo "+ nomArq + " criado"); 
   	       }
	       }

Ele compila, mas tem erro em tempo de execução e lança a exceção.

thiago.correa

E que exceção seria essa?!

magocebolinha

a IOEXCEPTION que eu lanço no codigo

rogelgarcia

Provavelmente nao achou o arquivo pq vc escreveu

“C:\teste de criação de arquivos”

e deveria ser

“C:\teste de criação de arquivos”

magocebolinha

:?
Também tentei isso mas não adianta… da erro na execução

rogelgarcia

Poe o stack trace…

magocebolinha
---------- Capture Output ----------
> "C:\Program Files (x86)\Java\jdk1.6.0_18\bin\java.exe" CriarArquivoTexto
java.io.FileNotFoundException: C:	este de criação de arquivos (A sintaxe do nome do arquivo, do nome do diretório ou do rótulo do volume está incorreta)
	at java.io.FileOutputStream.open(Native Method)
	at java.io.FileOutputStream.<init>(FileOutputStream.java:179)
	at java.io.FileOutputStream.<init>(FileOutputStream.java:131)
	at java.io.FileWriter.<init>(FileWriter.java:73)
	at CriarArquivoTexto.criaArquivoTexto(CriarArquivoTexto.java:30)
	at CriarArquivoTexto.main(CriarArquivoTexto.java:12)
> Terminated with exit code 0.
rogelgarcia

entao cara… vc nao alterou o nome para usar o \ como eu falei

“C:\teste de criação de arquivos”

nomes com espaço as vezes dao problema tb… entao pra garantir… usa assim

“C:\teste_de_criação_de_arquivos”

magocebolinha

tinha feito sim… é que voltei como estava e tirei o stack… enfim… colocando os underline deu certo… mas ele salva na pasta do projeto e não na pasta indicada… aff… complicado isso hein…

rogelgarcia

Pois entao… agora coloca o \

Fica de dever de casa pra vc descobrir pq tem que ser duas barras…

magocebolinha

Bom se o \ for a regra de formatação da barra eu já sei, agora o que eu estou dizendo é que ja tentei desta forma e não consegui

rogelgarcia

Poe o stack trace… do programa utilizando essa string

“C:\teste_de_criação_de_arquivos”

magocebolinha

rogelgarcia:
Poe o stack trace… do programa utilizando essa string

“C:\teste_de_criação_de_arquivos”

import java.io.*;
import javax.swing.*;


class CriarArquivoTexto {
	
	public static void main (String args[]){
		
		CriarArquivoTexto arqTxt = new CriarArquivoTexto();
		
		try {
			arqTxt.criaArquivoTexto("ArquivoTextoUm.txt");
			arqTxt.criaArquivoTexto("ArquivoTextoDois.txt");
		    arqTxt.criaArquivoTexto("ArquivoTextoTres.txt");
	    } 
	    catch (IOException ioe) {
		    ioe.printStackTrace();
		    JOptionPane.showMessageDialog(
		    null,
		    "Erro na criação do arquivo",
		    "Mensagem",
		    JOptionPane.PLAIN_MESSAGE
		    );
		    

    	}
     }
	
   	 private void criaArquivoTexto(String nomArq) throws IOException {
	   	 FileWriter fw = new FileWriter(new File ("C:\teste_de_criação_de_arquivos")); 
	   	 BufferedWriter bw = new BufferedWriter(fw);
	   	 
	   	       for (int i = 1;i<= 20; i++) {
		   	       if(i == 1) {
			   	       bw.write("Este é o arquivo " + nomArq + "\n");
			   	       bw.newLine();
		   	       }
		   	       bw.write("Esta é a linha de número "+i);
		   	       bw.newLine();
	   	       }
	   	       
	   	       bw.close();
	   	       System.out.println("Arquivo "+ nomArq + " criado"); 
   	       }
	       }





---------- Capture Output ----------
> "C:\Program Files (x86)\Java\jdk1.6.0_18\bin\java.exe" CriarArquivoTexto
java.lang.NoClassDefFoundError: CriarArquivoTexto
Caused by: java.lang.ClassNotFoundException: CriarArquivoTexto
	at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: CriarArquivoTexto.  Program will exit.
Exception in thread "main" 
> Terminated with exit code 1.
rogelgarcia

Viu … agora o erro tá diferente…

nao achou essa classe CriarArquivoTexto

vc nao deve ter configurado seu classpath corretamente na hora de executar…

rogelgarcia

Usa public class ao invés de só class

magocebolinha
rogelgarcia:
Usa public class ao invés de só class

Tentei mas da o mesmo resultado, ah e esse erro que eu postei ai em cima na verdade estava acontecendo pois tive um problema esses dois ultimos dias de não reconhecimento de classes mas ja foi solucionado...

Bom o stack trace parece que retornou algo mais conclusivo, parece que o acesso esta negado a pasta em questão! coloquei com "\\" e ele reconhece como uma "\" então até ai esta certo... quando coloco o nome com underlines ele ignora o nome e cria no diretorio da classe mesmo... então tentei com as "\\" e sem os underlines e ele retornou o seguinte

---------- Capture Output ----------
> "C:\Program Files (x86)\Java\jdk1.6.0_18\bin\java.exe" CriarArquivoTexto
java.io.FileNotFoundException: C:\teste de criação de arquivos (Acesso negado)
	at java.io.FileOutputStream.open(Native Method)
	at java.io.FileOutputStream.<init>(FileOutputStream.java:179)
	at java.io.FileOutputStream.<init>(FileOutputStream.java:131)
	at java.io.FileWriter.<init>(FileWriter.java:73)
	at CriarArquivoTexto.criaArquivoTexto(CriarArquivoTexto.java:30)
	at CriarArquivoTexto.main(CriarArquivoTexto.java:12)
> Terminated with exit code 0.
:roll:
rogelgarcia

Com o \ e com o underline dá o q?

magocebolinha

compila e executa normalmente mas salva no diretório da própria classe

rogelgarcia

No meu computador é windows 7… nao tive permissao pra salvar no C:
mas consegui salvar em uma subpasta…

O problema é que nao tenho o XP pra ver o que acontece :frowning:

magocebolinha

rogelgarcia:
No meu computador é windows 7… nao tive permissao pra salvar no C:
mas consegui salvar em uma subpasta…

O problema é que nao tenho o XP pra ver o que acontece :(

O meu é win 7 também… então acho que o problema deve ser de permissão mesmo… vou tentar salvar em outro local.

Criado 30 de março de 2010
Ultima resposta 5 de abr. de 2010
Respostas 26
Participantes 4