Nova duvida IO

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:

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

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.

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

alguém sabe?

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

ah tah… vou tentar… valew!

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.

E que exceção seria essa?!

a IOEXCEPTION que eu lanço no codigo

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”

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

Poe o stack trace…

---------- 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.

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”

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…

Pois entao… agora coloca o \

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

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

Poe o stack trace… do programa utilizando essa string

“C:\teste_de_criação_de_arquivos”

[quote=rogelgarcia]Poe o stack trace… do programa utilizando essa string

“C:\teste_de_criação_de_arquivos”[/quote]


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.