import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;

public class DropboxExample {

    static String ACCESS_TOKEN = "Your_access_token";

    public static void main(String[] args) {
        uploadFile();
        downloadFile();
    }

    public static void uploadFile() {
        try {
            String localFile = "C:\\Users\\Admin\\Desktop\\Msc CS Part 2\\DropboxProject\\sample.txt";
            File file = new File(localFile);

            URL url = new URL("https://content.dropboxapi.com/2/files/upload");
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();

            conn.setDoOutput(true);
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Authorization", "Bearer " + ACCESS_TOKEN);
            conn.setRequestProperty("Dropbox-API-Arg", "{\"path\":\"/sample.txt\",\"mode\":\"overwrite\"}");
            conn.setRequestProperty("Content-Type", "application/octet-stream");

            FileInputStream fis = new FileInputStream(file);
            OutputStream os = conn.getOutputStream();

            byte[] buffer = new byte[4096];
            int bytesRead;

            while ((bytesRead = fis.read(buffer)) != -1) {
                os.write(buffer, 0, bytesRead);
            }

            fis.close();
            os.close();

            int responseCode = conn.getResponseCode();

            if (responseCode == 200) {
                System.out.println("File Uploaded Successfully");
            } else {
                System.out.println("Upload Failed");
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void downloadFile() {
        try {
            URL url = new URL("https://content.dropboxapi.com/2/files/download");
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();

            conn.setRequestMethod("POST");
            conn.setRequestProperty("Authorization", "Bearer " + ACCESS_TOKEN);
            conn.setRequestProperty("Dropbox-API-Arg", "{\"path\":\"/sample.txt\"}");

            InputStream in = conn.getInputStream();
            FileOutputStream out = new FileOutputStream(
                "C:\\Users\\Snehal\\Desktop\\Msc CS Part 2\\DropboxProject\\download.txt"
            );

            byte[] buffer = new byte[4096];
            int bytesRead;

            while ((bytesRead = in.read(buffer)) != -1) {
                out.write(buffer, 0, bytesRead);
            }

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

            System.out.println("File Downloaded Successfully");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}