Download de arquivo de texto

Olá pessoal, estou com dificuldade no código abaixo, preciso baixar um arquivo de texto e salvar em uma pasta, porém ele esta dando erro, alguem sabe como resolver?
OBS: o link é um exemplo!
`
public class downloadArquivo {

public static void main(String[] args) {
    
    gravaArquivoDeURL("http://teste.com.br/arquivo.txt", "C:\\pasta");
}
public static File gravaArquivoDeURL(String stringUrl, String pathLocal) {
  
    try {

        URL url = new URL(stringUrl);
        String nomeArquivoLocal = url.getPath();
 
        InputStream is = url.openStream();
        FileOutputStream fos = new FileOutputStream(pathLocal + nomeArquivoLocal);
       
        int umByte = 0;
        while ((umByte = is.read()) != -1) {
            fos.write(umByte);
        } 
        is.close();
        fos.close();
    } catch (Exception ex) {
        new arquivoLog("Erro Exception: " + ex);
        System.out.println(ex);
        JOptionPane.showMessageDialog(null, "Erro ao fazer o download do arquivo!");
    }
    return null;
}

}

Erro:
java.io.IOException: Server returned HTTP response code: 403 for URL: http://teste.com.br/arquivo.txt
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1838)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1439)
at java.net.URL.openStream(URL.java:1038)

Ele tá dando erro 403 (Forbidden/Não permitido) para o acesso em “http://teste.com.br/arquivo.txt”. Eu tentei acessar isso e realmente não existe. Acho que pode ser um erro na sua URL

1 curtida

coloquei acima que o link é um exemplo, sabe me dizer como “autorizo” o acesso a fazer o download?

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.Base64;

import javax.swing.JOptionPane;

public class DownloadArquivo {

    public static void main(String[] args) {
        String usuario = "<seu usuário>";
        String senha = "<sua senha>";
        String url = "http://teste.com.br/arquivo.txt";
        String pasta = "C:\\pasta";
        gravaArquivoDeURL(usuario, senha, url, pasta);
    }

    public static File gravaArquivoDeURL(String usuario, String senha, String stringUrl, String pathLocal) {
        try {
            URL url = new URL(stringUrl);
            URLConnection connection = url.openConnection();
            String credenciais = Base64.getEncoder().encodeToString((usuario + ":" + senha).getBytes());
            connection.setRequestProperty("Authorization", "Basic " + credenciais);

            String nomeArquivoLocal = url.getPath();

            InputStream entrada = connection.getInputStream();
            OutputStream saida = new FileOutputStream(pathLocal + nomeArquivoLocal);

            byte[] bytes = new byte[8192];
            for (int lidos = -1; (lidos = entrada.read(bytes)) != -1; saida.write(bytes, 0, lidos)) {}
            entrada.close();
            saida.flush();
            saida.close();
        } catch (Exception ex) {
            new ArquivoLog("Erro Exception: " + ex);
            System.out.println(ex);
            JOptionPane.showMessageDialog(null, "Erro ao fazer o download do arquivo!");
        }
        return null;
    }
}

@staroski fiz o que você colocou acima, mas não da certo, continua o mesmo erro, eu criei o usuário e senha no servidor, e dei as credenciais para acessar o arquivo, mesmo assim não baixa.
Interessante que se eu colocar para baixar uma foto, ele não precisa de usuário e senha, ele baixa tranquilo.

Consegui resolver colocando o codigo:

connection.setRequestProperty(“User-Agent”, “Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11”);

abaixo da linha : URLConnection connection = url.openConnection();