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…
privatevoidcriaArquivoTexto(StringnomArq,intresultado)throwsIOException{FileWriterfw=newFileWriter(nomArq);BufferedWriterbw=newBufferedWriter(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:
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
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…
importjava.io.*;importjavax.swing.*;classCriarArquivoTexto{publicstaticvoidmain(Stringargs[]){CriarArquivoTextoarqTxt=newCriarArquivoTexto();try{arqTxt.criaArquivoTexto("ArquivoTextoUm.txt");arqTxt.criaArquivoTexto("ArquivoTextoDois.txt");arqTxt.criaArquivoTexto("ArquivoTextoTres.txt");}catch(IOExceptionioe){JOptionPane.showMessageDialog(null,"Mensagem","Erro na criação do arquivo",JOptionPane.PLAIN_MESSAGE);}}privatevoidcriaArquivoTexto(StringnomArq)throwsIOException{FileWriterfw=newFileWriter(newFile("C:\teste de criação de arquivos"));BufferedWriterbw=newBufferedWriter(fw);for(inti=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
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”
importjava.io.*;importjavax.swing.*;classCriarArquivoTexto{publicstaticvoidmain(Stringargs[]){CriarArquivoTextoarqTxt=newCriarArquivoTexto();try{arqTxt.criaArquivoTexto("ArquivoTextoUm.txt");arqTxt.criaArquivoTexto("ArquivoTextoDois.txt");arqTxt.criaArquivoTexto("ArquivoTextoTres.txt");}catch(IOExceptionioe){ioe.printStackTrace();JOptionPane.showMessageDialog(null,"Erro na criação do arquivo","Mensagem",JOptionPane.PLAIN_MESSAGE);}}privatevoidcriaArquivoTexto(StringnomArq)throwsIOException{FileWriterfw=newFileWriter(newFile("C:\teste_de_criação_de_arquivos"));BufferedWriterbw=newBufferedWriter(fw);for(inti=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");}}----------CaptureOutput---------->"C:\Program Files (x86)\Java\jdk1.6.0_18\bin\java.exe"CriarArquivoTextojava.lang.NoClassDefFoundError:CriarArquivoTextoCausedby:java.lang.ClassNotFoundException:CriarArquivoTextoatjava.net.URLClassLoader$1.run(URLClassLoader.java:202)atjava.security.AccessController.doPrivileged(NativeMethod)atjava.net.URLClassLoader.findClass(URLClassLoader.java:190)atjava.lang.ClassLoader.loadClass(ClassLoader.java:307)atsun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)atjava.lang.ClassLoader.loadClass(ClassLoader.java:248)Couldnotfindthemainclass:CriarArquivoTexto.Programwillexit.Exceptioninthread"main">Terminatedwithexitcode1.
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
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.