Ir ao conteúdo

Posts recomendados

Postado

Estou tentando fazer um programa em java que faça um número x cópias de um arquivo usando threads. (Callable) Tentei fazer seguindo a seguinte lógica:

class CopiaArquivo implements Callable<File>{
    File src;
    File dst;
    void copy(File src, File dst) throws IOException {
 this.src = src;
        this.dst = dst;
    }
    @Override
    public File call() throws Exception {
        return result();
    }
    private File result(){
        try{
            InputStream in = new FileInputStream(src);
            OutputStream out = new FileOutputStream(dst);  // Transferindo bytes de entrada para saída
            byte[] buf = new byte[1024];
            int len;
            while ((len = in.read(buf)) > 0) {
 out.write(buf, 0, len);
            }
            in.close();
            out.close();
        }
        catch(Exception ee){
            System.out.println("Erro ao copiar arquivo");
        }
        return dst;
    }
}
public class CopiaArq {
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args){
        // TODO code application logic here
        try{
            FileOutputStream arquivo = new FileOutputStream("arquivo.txt");
            PrintWriter pr = new PrintWriter(arquivo);
            pr.println("Hello World!!");
            pr.close();
            arquivo.close();
        }
        catch(Exception e){
            System.out.println("Erro ao escrever arquivo!!!");
        }
        ExecutorService e = Executors.newFixedThreadPool(2);
        ExecutorCompletionService<File> completionService = new ExecutorCompletionService<>(e);
        ArrayList<Future<File>> futures = new ArrayList<>();
        futures.add(e.submit(new CopiaArquivo()));
    }
}

Não sei se a lógica está correta e não consegui fazer a criação das cópias

Postado

Não sei usar Callable, mas se quiser usar Thread, pode fazer assim:

package copiador;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
import java.util.Objects;

public class Copiador implements Runnable {

    private Path arquivoOrigem;
    private Path pastaDestino;
    private int copias;

    public Copiador(Path arquivoOrigem, Path pastaDestino, int copias) {
        this.arquivoOrigem = Objects.requireNonNull(arquivoOrigem, "O arquivo de origem não pode ser null.");
        this.pastaDestino = Objects.requireNonNull(pastaDestino, "A pasta de destino não pode ser null.");
        this.copias = Math.abs(copias);
    }

    @Override
    public void run() {
        if (Files.notExists(arquivoOrigem)) {
            throw new IllegalArgumentException("O arquivo de origem não foi encontrado.");
        }

        try {
            if (Files.notExists(pastaDestino)) {
                Files.createDirectories(pastaDestino);
            }

            for (int i = 1; i <= copias; i++) {
                String sufixo = "_".concat(String.valueOf(i));

                StringBuilder nomeDestino = new StringBuilder(arquivoOrigem.getFileName().toString());
                nomeDestino.insert(nomeDestino.lastIndexOf("."), sufixo);

                Path arquivoDestino = pastaDestino.resolve(nomeDestino.toString());
                Files.copy(arquivoOrigem, arquivoDestino, StandardCopyOption.REPLACE_EXISTING);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

package copiador;

import java.nio.file.Path;
import java.nio.file.Paths;

public class CopiadorTest {
    public static void main(String[] args) {
        Path arquivo = Paths.get("");   // Arquivo que será copiado
        Path pasta = Paths.get("");     // Pasta de destino
        int copias = 10;                // Quantidade de cópias

        Copiador copiador = new Copiador(arquivo, pasta, copias);

        Thread thread = new Thread(copiador);
        thread.start();

        System.exit(0);
    }
}

 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...