Download de arquivos

Olá,
Tenho um arquivo que contém milhares linhas como essa https://db-image-upload.s3.amazonaws.com/produtos/59584/550/1.jpg, eu preciso de salvar as imagens que estão no link em um diretório especifico como 59584.
Eu fiz isso até agora:

import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;

public class LeArquivo {

	public static void main(String[] args) throws IOException{

		Scanner scanner = new Scanner(new FileReader("/Users/karlinhos/Downloads/imagens/imagens.txt"));
		ArrayList<String> urlCompleta = new ArrayList<String>();
		CriaDiretorio criar = new CriaDiretorio();
		SalvaImagem salvar = new SalvaImagem();
		
		while (scanner.hasNext()) {
			urlCompleta.add(scanner.next());
		}
		scanner.close();
		
		criar.criarDiretorio(urlCompleta.get(0).substring(50, 55));
		
		salvar.salvaImagem("/Users/karlinhos/Downloads/imagens/".concat(urlCompleta.get(0).substring(50, 55)), urlCompleta.get(0));
		
		for (int j = 1; j < urlCompleta.size(); j++) {
			
			if(urlCompleta.get(j).substring(50, 55).equals(urlCompleta.get(j-1).substring(50, 55))){
				salvar.salvaImagem("/Users/karlinhos/Downloads/imagens/".concat(urlCompleta.get(j).substring(50, 55)), urlCompleta.get(j));
			}else{
				criar.criarDiretorio(urlCompleta.get(j).substring(50, 55));
				
				salvar.salvaImagem("/Users/karlinhos/Downloads/imagens/".concat(urlCompleta.get(j).substring(50, 55)), urlCompleta.get(j));
			}
		}
	}
}

import java.io.File;

public class CriaDiretorio {
	public void criarDiretorio(String nomeDiretorio) {
        try {
            File diretorio = new File("/Users/karlinhos/Downloads/imagens/".concat(nomeDiretorio));
            diretorio.mkdir();
        } catch (Exception ex) {
            System.out.println("Erro ao criar o diretorio: " + ex);
        }
    }
}

import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;
import java.io.IOException;

public class SalvaImagem {

	public void salvaImagem(String destino, String urlArquivo)throws IOException {

		URL url = new URL(urlArquivo);
		InputStream is = url.openStream();
		FileOutputStream fos = new FileOutputStream(urlArquivo);

		int bytes = 0;

		try {
			while ((bytes = is.read()) != -1) {
				fos.write(bytes);
			}
			is.close();
			fos.close();
			
		} catch (Exception e) {
		
			System.out.println("Erro ao salvar a imagem: " + e);
		}		
	}
}

Especifique pontualmente qual é a sua dúvida pra alguém conseguir te ajudar.

vc precisa fazer isso com java?

não pode usar o wget ?

Como salvar as imagens com o nome certo dentro do diretorio correspondente. Do jeito que está, consigo criar o diretorio, mais na hora de salvar a imagem está salvando fora do diretorio e com o nome do diretorio.

Nao precisa ser em java, pode ser em qualquel linguagem. Estou tentando em fazer em shellscritp, mais tbem nao estou conseguindo.