NoSuchFileException при попытке загрузить исполняемый файл - PullRequest
0 голосов
/ 11 мая 2018

Я работаю над созданием персонального загрузчика утилит для таких вещей, как Malwarebytes, Adware Cleaner и т. Д. Но я никогда раньше не работал с чем-то подобным. Я искал вокруг и нашел некоторую документацию о том, как загрузить файлы из URL в каталог, но я пока не смог заставить его работать. В первый раз он превратил каталог в непригодный файл, и теперь, когда я изменил URL-адрес, его не удается загрузить из-за ошибок, перечисленных внизу. Может ли кто-нибудь указать мне правильное направление или сказать, что я делаю неправильно?

package com.kcc;

import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;

public class Testing2 {
    public static String testURL;
    public static String saveDir;
    public static void main(String[] args) throws IOException {
        testURL ="https://download.bleepingcomputer.com/dl/a652734ff3304da2530acb93754c1bf7/5af5a320/windows/security/security-utilities/a/adwcleaner/AdwCleaner.exe";
                //"https://download.toolslib.net/download/file/1/1511?s=2LPvu8kniU2T794QD0FXSN21jxnJOqLP";
        saveDir = "C:\\Users\\Austin\\Desktop\\kccutil";
        download(testURL, saveDir);
    }

    private static Path download(String sourceURL, String targetDirectory) throws IOException
    {
        URL url = new URL(sourceURL);
        String fileName = sourceURL.substring(sourceURL.lastIndexOf('/') + 1, sourceURL.length());
        Path targetPath = new File(targetDirectory + File.separator + fileName).toPath();
        Files.copy(url.openStream(), targetPath, StandardCopyOption.REPLACE_EXISTING);
        return targetPath;
    }
}

В настоящее время я получаю эти ошибки

Exception in thread "main" java.nio.file.NoSuchFileException: C:\Users\Austin\Desktop\kccutil\AdwCleaner.exe
    at sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:79)
    at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
    at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:102)
    at sun.nio.fs.WindowsFileSystemProvider.newByteChannel(WindowsFileSystemProvider.java:230)
    at java.nio.file.spi.FileSystemProvider.newOutputStream(FileSystemProvider.java:434)
    at java.nio.file.Files.newOutputStream(Files.java:216)
    at java.nio.file.Files.copy(Files.java:3016)
    at com.kcc.Testing2.download(Testing2.java:25)
    at com.kcc.Testing2.main(Testing2.java:17)

РЕДАКТИРОВАТЬ: оказывается, что ошибка выше, каталог не был создан. Но сейчас я получаю новую ошибку

Exception in thread "main" java.io.FileNotFoundException: https://download.bleepingcomputer.com/dl/a652734ff3304da2530acb93754c1bf7/5af5a320/windows/security/security-utilities/a/adwcleaner/AdwCleaner.exe
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1872)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1474)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)
    at java.net.URL.openStream(URL.java:1045)
    at com.kcc.Testing2.download(Testing2.java:25)
    at com.kcc.Testing2.main(Testing2.java:17)

Ответы [ 2 ]

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

В целях отладки вы можете попытаться сохранить файлы в рабочем каталоге (т. Е. См. Папку .). Используя этот подход, вы можете получить доступ к файлу по его имени.

В будущем я рекомендую использовать Java 7 NIO Api : Paths.get() - для первоначального построения пути из деталей, path.parent() - для ссылки на родительский каталог, path.resolve() - для построения дочернего пути .

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

Если вы хотите скачать файл, вы должны использовать FTP-сервер, а не HTTP, если у вас есть исполняемый файл. Но если у вас уже есть HTTP-ссылка в Интернете, которая вызывает загружаемый .exe (как в вашем случае), вам не нужен метод загрузки. Вам просто нужно отправить запрос http в навигатор (желательно, если это веб-приложение), что-то вроде:

File htmlFile = new File(url);
Desktop.getDesktop().browse(htmlFile.toURI());

Или вы можете загрузить этот файл, используя FileUtils Apache Common IO :

import org.apache.commons.io.FileUtils;
FileUtils.copyURLToFile(url, file_destination);

Или вы можете проверить этот ответ , используя Java NIO

...