Bom galera já vi muita gente perguntando isso mas ninguem exatamente com o mesmo problema que estou vamos lá:
o erro:
java.io.FileNotFoundException: c:\integrador\arquivos\leitura (Acesso negado)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at integrador.Integrador.LeArquivo(Integrador.java:58)
at integrador.Integrador.main(Integrador.java:41)
Este erro para cada arquivo que ele tenta grava dentro do for
[code]
private static void LeArquivo() {
Integrador.logger.info("Entrando no leitor de arquivos");
File pastaLeitura = new File(config.get("pasta_de_leitura").toString());//o que o config.get recebe aqui é c:\integrador\arquivos\leitura
File pastaEscrita = new File(config.get("pasta_de_escrita").toString());//o que o config.get recebe aqui é c:\integrador\arquivos\escrita
//neste for consigo fazer loop para todos os arquivos que tenho na pasta.
for (int i=0; i<pastaLeitura.list().length; i++){
try {
//já sei a solução basica pro erro tenho que passar o nome do arquivo no FileInputStream e depois no FileOutpuStream tipo c:\integrador\arquivos\leitura\arquivo.txt
//porem tenho vários arquivos com nomes diferentes preciso que todo o arquivo eu leia e depois copie na nova pasta com o mesmo nome
FileInputStream fis = new FileInputStream(pastaLeitura);
FileOutputStream fos = new FileOutputStream(pastaEscrita);
FileChannel inChannel = fis.getChannel();
FileChannel outChannel = fos.getChannel();
outChannel.transferFrom(inChannel, 0, inChannel.size());
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
Integrador.logger.error("erro arquivos não encontrado " + e.getMessage());
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
Integrador.logger.error("Erro ao salvar arquivos " + e.getMessage());
e.printStackTrace();
}
}
}
[/code]
O que não sei como fazer é pegar o nome do arquivo que estou lendo e passar para o arquivo de saída.
Valew pela ajuda…
Primeiro que o erro diz, claramente, “acesso negado”.
Segundo que o método list() retorna um array de String que contém os nomes dos arquivos existentes no diretório em questão.
Amigo então sobre o acesso negado coloquei os seguinte ifs para verificar se tenho permissão ou não
if (pastaLeitura.canRead() && pastaLeitura.canRead()){
if(pastaEscrita.canRead() && pastaEscrita.canWrite()){
Integrador.logger.debug("Permissão de leitura e escrita na pasta de leitura");
Integrador.logger.debug("Permissão de leitura e escrita na pasta de escrita");
}
}
E pelo que estou entendendo dessa classe o que acontece deste erro é porque não estou retornando para ele o caminho completo com o nome dos arquivos ai tentei com a list() que retorna do File que tenho mas o que ele retorna são os nomes objetos na memória e não os nomes dos arquivos.
Como posso fazer para pegar o path e o nome dos arquivos para passar ? tipo c:\arquivo.txt ???
Leu o javadoc da classe java.io.File?
Se não, está em tempo.
Procure pela descrição detalhada do método listFiles
Então amigo meu problema é justo nessa classe quand eu utilizo o .listFiles() ou somente o list() eu consigo ver a quantidade de objetos na pasta, com o .length, porem quanto tento per o nome do arquivo algo como por exemplo System.out.println(path.listFiles()) a saide é está[Ljava.io.File;@1391f61c o que eu preciso descobrir é como passar o nome do arquivo para o file que vou pegar e o que vou criar para passar aqui nos input e no output ficaria algo assim
FileInputStream fis = new FileInputStream(pastaLeitura.getAbsoluteFile().listFiles().toString());
FileOutputStream fos = new FileOutputStream(pastaEscrita.getAbsoluteFile().listFiles().toString());
FileChannel inChannel = fis.getChannel();
FileChannel outChannel = fos.getChannel();
outChannel.transferFrom(inChannel, 0, inChannel.size());
Mas mesmo assim me da erro.
12 [main] INFO integrador.Integrador - Lendo arquivo: c:\integrador\arquivos\leitura
13 [main] ERROR integrador.Integrador - erro arquivo não encontrado [Ljava.io.File;@2f3cf887 (O sistema não pode encontrar o arquivo especificado)
java.io.FileNotFoundException: [Ljava.io.File;@2f3cf887 (O sistema não pode encontrar o arquivo especificado)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.io.FileInputStream.<init>(FileInputStream.java:97)
at integrador.Integrador.LeArquivo(Integrador.java:67)
at integrador.Integrador.main(Integrador.java:41)
Para cada arquivo que eu tento ler… mudando somente a referencia ao arquivo [Ljava.io.File;@2f3cf887
Aqui ocorreu tudo sem problemas, da para melhorar ainda mais o código…Copia os Arquivos de uma Pasta para Nova Pasta !!!
public class TesteCopia{
List<Path> cArquivos = new ArrayList<>();
public static void main(String[] args){
TesteCopia teste = new TesteCopia();
//Pasta onde Estão seus Arquivos
teste.leituraArquivos("C:\\Users\\Voce\\Desktop\\Musicas");
//Local onde nova pasta será criada e recebera as copias
teste.copiandoArquivo("C:\\Users\\Voce\\Desktop\\NovaPastaMusica");
}
private void leituraArquivos(String entradaCaminho){
Path atual = Paths.get(entradaCaminho);
if(Files.isDirectory(atual)){
try{
DirectoryStream<Path> dir = Files.newDirectoryStream(atual);
for(Path pp : dir){
cArquivos.add(pp.toAbsolutePath());
}
}
catch(Exception ex){
}
}else{
JOptionPane.showMessageDialog(null, "Diretório Não Existe", "Verificando Diretorio", JOptionPane.INFORMATION_MESSAGE);
}
}
private void copiandoArquivo(String saidaCaminho){
Path novo = Paths.get(saidaCaminho);
try{
Files.createDirectories(novo);
if(Files.isDirectory(novo)){
for(Path cAbsoluto : cArquivos){
try{
Files.copy(cAbsoluto, Paths.get(novo + "\\" + cAbsoluto.getFileName()), StandardCopyOption.REPLACE_EXISTING);
}
catch(Exception ex){
}
}
}else{
JOptionPane.showMessageDialog(null, "Diretório Não Criado", "Criação do Novo Diretório", JOptionPane.INFORMATION_MESSAGE);
}
}
catch(Exception ex){
}
}
}