Я пытаюсь найти размер каталога на сервере. Итак, я определил класс, чтобы получить доступ к серверу и найти размер:
public class SoftwareDownload {
private String inputUrl;
private String destinationPath;
private String userName;
private String userPassword;
private URL url = null;
private URLConnection uc = null;
private String userpass;
private String basicAuth;
private boolean isAuthendicated = false;
public SoftwareDownload(String inputUrl, String destinationPath, String userName, String userPassword) {
this.inputUrl = inputUrl;
this.destinationPath = destinationPath;
this.userName = userName;
this.userPassword = userPassword;
userpass = userName + ":" + userPassword;
basicAuth = "Basic " + javax.xml.bind.DatatypeConverter.printBase64Binary(userpass.getBytes());
try {
url = new URL(this.inputUrl);
try {
uc = url.openConnection();
uc.setRequestProperty ("Authorization", basicAuth);
isAuthendicated = true;
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("UC check nul");
e.printStackTrace();
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
System.out.println("Connection check nul");
e.printStackTrace();
}
}
public long httpFindSoftwarePackage ( int count,boolean isSizeRequired) throws IOException {
long packageByteCnt = 0;
InputStream inStream = uc.getInputStream();
InputStreamReader streamReader=new InputStreamReader(inStream);
BufferedReader inputStream = new BufferedReader(streamReader);
String line = "";
while(line != null) {
line = inputStream.readLine();
if ( (line != null ) && ( line.startsWith("<a href=")) ) {
Document doc = Jsoup.parse(line);
Element link = doc.select("a").first();
String linkHref = link.attr("href");
String sourceDir = inputUrl+"/"+linkHref;
SoftwareDownload downloadimage = new SoftwareDownload (sourceDir,null,userName,userPassword);
if( linkHref.endsWith("/") == true ) {
packageByteCnt+=downloadimage.httpFindSoftwarePackage(count+1,isSizeRequired);
}
else
{
packageByteCnt+=downloadimage.uc.getContentLengthLong();
}
}
}
return packageByteCnt;
}
}
Class Main:
public static void main(final String[] args) throws IOException {
String httpurl ="http://rb-cmbinex.com/software/rfs/16.2S813/rfs_ni";
String destiDir = "d:/TestDirectory";
String user = "username";
String password = "Password#123";
SoftwareDownload download = new SoftwareDownload(httpurl, null, user, password);
System.out.println("Total Package Size : " + download.httpFindSoftwarePackage(0, true));
}
Когда я запускаю эту программу в одиночку, я могу прочитать размер каталога. Но в то же время, когда я интегрировал этот вызов SoftwareDownload в мое java-приложение с весенней загрузкой, я получил это исключение ввода-вывода,
java.io.IOException: сервер вернул код ответа HTTP: 500 для URL: http://rb -cmbinex.com / software / rfs / 16.2S813 / rfs_ni / rootfs /
на sun.net.www.protocol.http.HttpURLConnection.getInputStream0 (неизвестный источник)
на sun.net.www.protocol.http.HttpURLConnection.getInputStream (неизвестный источник)
на com.bosch.boardfarm.model.SoftwareDownload.httpFindSoftwarePackage (SoftwareDownload.java:113)
на com.bosch.boardfarm.model.SoftwareDownload.httpFindSoftwarePackage (SoftwareDownload.java:143)
Затем я обнаружил, что исключение ввода-вывода происходит из строки (при получении входного потока для подключенного URL-адреса),
InputStream inStream = uc.getInputStream ();
Может ли кто-нибудь помочь решить эту проблему.