[RESOLVIDO] Problema ao copiar arquivos usando FileOutputStream (o caminho não existe)

1 resposta
eliangela

Olá pessoal!

Eu estou fazendo um sistema que monitora as portas USB. Quando uma unidade removível é inserida, esse meu programa deve fazer duas coisas:
1 - copiar alguns arquivos para esse dispositivo.
2 - notificar o usuário da nova unidade (igual o Winamp faz).

Este é o código que eu uso pra mover meus arquivos:
public boolean moveArquivo(File origem, File destino) throws FileNotFoundException, IOException {
		if (origem.isDirectory()) {
			return false;
		}

		if (!destino.isDirectory()) {
			return false;
		}

		FileInputStream in = new FileInputStream(origem);
		FileOutputStream out = new FileOutputStream(destino); //dá erro aqui

		FileChannel channelIn = in.getChannel();
		FileChannel channelOut = out.getChannel();

		channelIn.transferTo(0, channelIn.size(), channelOut);
		
		in.close();
		out.close();

		if (destino.exists()) {
			origem.delete();
			return true;
		} else {
			return false;
		}
	}
E este é o erro:
java.io.FileNotFoundException: J:\ (O sistema não pode encontrar o caminho especificado)
        at java.io.FileOutputStream.open(Native Method)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:179)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:131)
        at br.com.tdta.utils.file.FileUtils.moveArquivo(FileUtils.java:26)
        at br.com.medstorm.medfourtechnic.telas.FramePrincipal$2.run(FramePrincipal.java:109)

A segunda tarefa é executada corretamente. Estou tendo problemas com a primeira tarefa, o que é muito estranho, já que a unidade J:\ existe.

Obrigada

1 Resposta

eliangela

Problema resolvido!

Foi por pura falta de atenção que estava acontecendo o erro: Código certo:
public boolean moveArquivo(String arqOrigem, String dirDestino) throws FileNotFoundException, IOException {
		File fOrigem = new File(arqOrigem);
		File fDestino = new File(dirDestino);
		if (fOrigem.isDirectory()) {
			return false;
		}

		if (!fDestino.isDirectory()) {
			return false;
		}

		FileInputStream in = new FileInputStream(arqOrigem);
		FileOutputStream out = new FileOutputStream(dirDestino
				+ (dirDestino.endsWith(String.valueOf(File.separatorChar)) ? "" : File.separatorChar)
				+ arqOrigem.substring(arqOrigem.lastIndexOf(File.separatorChar) + 1)); //aqui está corrigido

		FileChannel channelIn = in.getChannel();
		FileChannel channelOut = out.getChannel();

		channelIn.transferTo(0, channelIn.size(), channelOut);

		in.close();
		out.close();

		if (fDestino.exists()) {
			fOrigem.delete();
			return true;
		} else {
			return false;
		}
	}

O problema é que eu estava passando um diretório como parâmetro pro FileOutputStream.

Até mais

Criado 11 de julho de 2011
Ultima resposta 11 de jul. de 2011
Respostas 1
Participantes 1