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

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