Как прочитать все файлы и папки "рекурсивно" через URL-ссылку - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь загрузить все файлы с URL.Но, анализируя код с помощью инструментов разработчика Chrome, я вижу, что нужные мне файлы находятся в пути, например: /var/www/html/folders_and_files_that_i_need.

Кто-нибудь есть идея, чтобы помочь мне?Заранее спасибо.

Мой код на самом деле может загрузить только файл настройки абсолютного пути.

public static void downloadFile(String fileURL, String saveDir) throws IOException {
    URL url = new URL(fileURL);
    HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
    int responseCode = httpConn.getResponseCode();

    // always check HTTP response code first
    if (responseCode == HttpURLConnection.HTTP_OK) {
        String fileName = "";
        String disposition = httpConn.getHeaderField("Content-Disposition");
        String contentType = httpConn.getContentType();
        int contentLength = httpConn.getContentLength();

        if (disposition != null) {
            // extracts file name from header field
            int index = disposition.indexOf("filename=");
            if (index > 0) {
                fileName = disposition.substring(index + 10, disposition.length() - 1);
            }
        } else {
            // extracts file name from URL
            fileName = fileURL.substring(fileURL.lastIndexOf("/") + 1, fileURL.length());
        }

        System.out.println("Content-Type = " + contentType);
        System.out.println("Content-Disposition = " + disposition);
        System.out.println("Content-Length = " + contentLength);
        System.out.println("fileName = " + fileName);

        // opens input stream from the HTTP connection
        InputStream inputStream = httpConn.getInputStream();
        String saveFilePath = saveDir + File.separator + fileName;

        // opens an output stream to save into file
        FileOutputStream outputStream = new FileOutputStream(saveFilePath);

        int bytesRead = -1;
        byte[] buffer = new byte[BUFFER_SIZE];
        while ((bytesRead = inputStream.read(buffer)) != -1) {
            outputStream.write(buffer, 0, bytesRead);
            System.out.println("buffering");
        }

        outputStream.close();
        inputStream.close();

        System.out.println("Arquivo " + fileName + " baixado");
    } else {
        System.out.println("No file to download. Server replied HTTP code: " + responseCode);
    }
    httpConn.disconnect();
}

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

В REST API у вас должен быть ресурс для отдельных файлов Java может загрузить все файлы и папки в каталоге

может вам помочь.

0 голосов
/ 24 мая 2018

Вы можете использовать следующую логику:

  1. Получить полный путь к файлу внутри этой папки, используя рекурсивный алгоритм.
  2. В вашем сервлете вы можете сжать все файлы.
  3. Запишите заархивированный файл в ServletOutputStream

Ниже приведено объяснение этого:

Получить полный путь к файлу внутри этой папки с использованием рекурсивного алгоритма.

Вы можете использовать приведенный ниже код для получения всех файлов в папке с использованием рекурсии, этот код был взят отсюда

// Recursive Java program to print all files
// in a folder(and sub-folders)

import java.io.File;

public class GFG 
{
     static void RecursivePrint(File[] arr,int index,int level) 
     {
         // terminate condition
         if(index == arr.length)
             return;

         // tabs for internal levels
         for (int i = 0; i < level; i++)
             System.out.print("\t");

         // for files
         if(arr[index].isFile())
             System.out.println(arr[index].getName());

         // for sub-directories
         else if(arr[index].isDirectory())
         {
             System.out.println("[" + arr[index].getName() + "]");

             // recursion for sub-directories
             RecursivePrint(arr[index].listFiles(), 0, level + 1);
         }

         // recursion for main directory
         RecursivePrint(arr,++index, level);
    }

    // Driver Method
    public static void main(String[] args)
    {
        // Provide full path for directory(change accordingly)  
        String maindirpath = "C:\\Users\\Gaurav Miglani\\Desktop\\Test";

        // File object
        File maindir = new File(maindirpath);

        if(maindir.exists() && maindir.isDirectory())
        {
            // array for files and sub-directories 
            // of directory pointed by maindir
            File arr[] = maindir.listFiles();

            System.out.println("**********************************************");
            System.out.println("Files from main directory : " + maindir);
            System.out.println("**********************************************");

            // Calling recursive method
            RecursivePrint(arr,0,0); 
       } 
    }
}

Для создания zip и загрузки егоиз сервлета вы можете перейти по этой ссылке Используя сервлет, как вы загружаете несколько файлов из базы данных и архивируете их для загрузки клиентом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...