Я загружаю несколько zip-файлов из приложения, и каждый файл имеет разный размер. Очевидно, что время загрузки зависит от размера файла. У меня есть приведенный ниже код Java для проверки загрузки на основе размера файла. Но он не работает должным образом. Он просто ждет 10 секунд и завершает цикл, переходя к следующему набору строк. Может ли кто-нибудь помочь мне решить эту проблему?
public void isFileDownloaded(String downloadPath, String folderName) {
String source = "downloadPath" + folderName + ".zip";
long fileSize1;
long fileSize2;
do {
System.out.println("Entered do-while loop to check if file is downloaded successfully");
String tempFile = source + "crdownload";
fileSize1 = tempFile.length(); // check file size
System.out.println("file size before wait time: " + fileSize1 + " Bytes");
Thread.sleep(10); // wait for 10 seconds
fileSize2 = tempFile.length(); // check file size again
System.out.println("file size after wait time: " + fileSize2 + " Bytes");
} while (fileSize2 != fileSize1);
}
Размер файла до и после времени ожидания всегда возвращает 43 байта.
@curisepandey: я заранее знаю имена файлов. Параметризация это как «Имя папки» в исходной переменной.
Очищайте папку загрузки после каждого запуска. Затем проверьте, существует ли загружаемый файл. Или можно попробовать с переименованием.
@HasithaMJayawardana: я удаляю загруженный файл с помощью кода после выполнения над ним необходимых операций. Но цикл «делать-пока» все еще не работает.
возьмите все имена файлов в массиве String, затем переберите его и внутри цикла проверьте наличие каждого файла.
Верен ли `String source = "downloadPath" + folderName + ".zip";`? Я подозреваю, что вместо этого вы хотите использовать аргумент downloadPath
.
Возьмите два списка строк:
List<String> expectedFileName ;
в этот список добавьте все имена файлов, которые должны быть в формате строки. [Ваши ожидаемые имена файлов]
затем, после загрузки всех файлов, перейдите в каталог загрузки:
Проверьте, сколько файлов присутствует, используя такой код:
new File(<directory path>).list().length
Теперь сравните длину ожидаемого и фактического:
expectedFileName.size()
и new File(<directory path>).list().length
, если есть какое-либо несоответствие, верните ложный и напечатайте Файлы отсутствуют. Если нет никакого несоответствия, получите все имена файлов из каталога следующим образом:
List<String> actualFileName;
File folder = new File("your/path");
File[] listOfFiles = folder.listFiles();
for (int i = 0; i < listOfFiles.length; i++) {
if (listOfFiles[i].isFile()) {
actualFileName.add(listOfFiles[i].getName());
}
}
Теперь у вас есть два списка String , вы можете легко их сравнить. Хотя он не будет проверять размер файла.
Вот как я управляю загрузкой файлов:
public class Rahul {
String downloadDir = "C:\\Users\\pburgr\\Downloads\\";
public WebDriverWait waitSec(WebDriver driver, int sec) {
return new WebDriverWait(driver, sec);
}
public File waitToDownloadFile(WebDriver driver, int sec, String fileName) {
String filePath = downloadDir + fileName;
waitSec(driver, 30).until(new Function<WebDriver, Boolean>() {
public Boolean apply(WebDriver driver) {
if (Files.exists(Paths.get(filePath))) {
System.out.println("Downloading " + filePath + " finished.");
return true;
} else {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
System.out.println("Downloading " + filePath + " not finished yet.");
}
}
return false;
}
});
File downloadedFile = new File(filePath);
return downloadedFile;
}
}
Я нашел ошибку, сделанную мной. System.out.println("Загрузка " + filePath + " еще не завершена."); должен быть в улове. Я отредактировал свой ответ.
Вы знаете имена файлов заранее или они динамические?