criação de arquivos através de um loop for

Gente, estou querendo criar vários arquivos, sendo que cada arquivo vai ter o nome da linha de um arquivo que eu estou lendo…

Código que eu fiz:

public static void main(String[] args) throws IOException
{
File arq = new File(".",“arquivo0.txt”);
FileReader fr = new FileReader(arq);
BufferedReader br = new BufferedReader(fr);
File pasta = new File(“arqs”);
String linha = br.readLine();

    while(linha!=null)
    {
        String nome = linha+".txt";
        File arquivo = new File(pasta,nome);
        if(!arquivo.exists())
            arquivo.createNewFile();//Erro esta aqui
        arquivo = link(linha);                                                                              
        copiar(link(linha),arquivo);
        
    }
}

o erro e o seguinte…

Exception in thread “main” java.io.IOException: No such file or directory
at java.io.UnixFileSystem.createFileExclusively(Native Method)

gostaria de saber o que está acontecendo…alguém pode me ajudar??

Quando você cria um arquivo em Java, tem que se certificar de que o diretório onde você está criando o arquivo existe.

Se algumas das linhas que você está lendo conter um caminho que não exista, a exceção vai ser lançada.

Você pode pedir para criar o diretório antes, através do médoto mkdir(), ou pedir para que o java crie todo o caminho necessário para chegar até a pasta local onde vai ser criado o arquivo através do método mkdirs().

Tente fazer assim:

File arquivo = new File(pasta,nome); arquivo.mkdirs(); if(!arquivo.exists()) arquivo.createNewFile();

:slight_smile:

Ah, aqui no GUJ tem um tutorial explicando isso: http://www.guj.com.br/article.show.logic?id=13

eu achei o erro…mas n to entenendo o pq…
e o seguiinte
neste arquivo;.;;;;ha diversos links
ai eu vo i salvando os arqs;…
www.fulano.com.br/exmeplo.txt
teste2.com/exemplo.txt

qnd eu leio a linha do arquivo… e contem barra, o java nao “coloca” o caratere de escape…ai qnd eu passo este link p o file…ele conisdera que aquilo e um caminho e nao um nome do arquivo…
pensava que qnd recebesse da entrada os dados…eles seriam “tratados”…nao?
se e assim mesmo que java trabalha…ha como fazer este tratamento automatico???

Você está lendo uma linha, porém todos os seus dados no java são tratados como String.
Não tem como adivinhar que aquilo que você está lendo é um caminho/diretório.

Repare uma coisa:

Se você digitar:

String nome = "C:/arquivo.txt";

Não tem nenhum erro.

Mas se você digitar

String nome = "C:\arquivo.txt";

A prórpia IDE vai te mostrar que tem um erro.
Não tem como saber essas coisas em tempo de execução.

Faz o seguinte, sempre que você ler uma linha, usa o replaceAll.

linha = linha.replaceAll("\\","\\\\");

O código fica feio, mas resolve!

Alguém sabe alguma forma de melhorar a linha de código acima? Procurei na net e não achei muita coisa…
Cheguei a essa conclusão por tentativa erro no eclipse.