Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

File Download mit Java Applikation

Empfohlene Antworten

Veröffentlicht

Hallo Folks,

Ich hätte da mal wieder ein nettes Problemchen:

Ich möchte von einer Web-Seite eine Datei herunterladen.

Zum Beispiel von www.hugoegon.de die Datei index.html (genauer eine von mir auf einer privaten Seite bereitgestellte Datei)

Mal ganz einfach gedacht:

Die Klasse File hat auch einen Konstruktor File(URI) nur bringt mich die Klasse URI auch nicht weiter weil ich damit scheinbar nur lokale Dateien spezifizieren kann.

Mit HttpRequest-Klassen hab ich mich so noch ned rumgeschlagen aber leider auf anhieb auch nix passendes gefunden.

Hat von euch jemand schon mal ein ähnliches Problem gehabt und noch viel wichtiger vielleicht eine Lösung ... wenn auch nur ne Idee ... dazu?

Ich möchte von einer Web-Seite eine Datei herunterladen.
Sowas Ähnliches hab ich mal vor knapp einem Jahr gemacht. Allerdings habe ich sie nicht herunter geladen, sondern nur ausgelesen.

Also wenn dir das schon weiter hilft, hier mal der Code davon (Package-Angabe lass ich mal weg, is ja momentan Bratwurst):

import java.io.IOException;

import java.io.InputStream;

import java.net.ConnectException;

import java.net.HttpURLConnection;


public class HtmlLeser {

	private HttpURLConnection httpURLConnection;

	private int responseCode;


	public HtmlLeser(HttpURLConnection httpURLConnection) throws IOException {

		setHttpURLConnection(httpURLConnection);

	}


	public HttpURLConnection getHttpURLConnection() {

		return httpURLConnection;

	}


	public void setHttpURLConnection(HttpURLConnection httpURLConnection) throws IOException {

		this.httpURLConnection = httpURLConnection;

		if (httpURLConnection != null) {

			try {

				responseCode = httpURLConnection.getResponseCode();

			}

			catch (ConnectException e) {

				// nix... weiter geht's!

			}

		}

		else {

			responseCode = HttpURLConnection.HTTP_BAD_REQUEST;

		}

	}


	public boolean isLinkOk() {

		return responseCode == HttpURLConnection.HTTP_OK;

	}


	public String getInhalt() throws IOException {

		if (isLinkOk())

		{

			try {

				InhaltHoler thread = new InhaltHoler(httpURLConnection);

				thread.setDaemon(true);

				thread.start();

				Thread.sleep(1500);

				thread.interrupt();


				return thread.getInhalt();

			}

			catch (InterruptedException e) {

				e.printStackTrace();

			}

		}

		return "";

	}



	private class InhaltHoler extends Thread {

		private HttpURLConnection connection;

		String inhalt = "";


		public InhaltHoler(HttpURLConnection conn) {

			connection = conn;

		}


		public void run() {

			try {

				InputStream stream = connection.getInputStream();

				StringBuffer inhaltBuffer = new StringBuffer();

				int zeichenInt;

				char zeichenChar;


				while ((zeichenInt = stream.read()) != -1)

				{

					zeichenChar = (char) zeichenInt;

					inhaltBuffer.append(zeichenChar);

				}

				inhalt = inhaltBuffer.toString();

			} catch (Exception e) {

				e.printStackTrace();

			}

		}


		public String getInhalt() {

			return inhalt;

		}

	}

}
Mir is grad noch aufgefallen, der InhaltHoler sollte eher Runnable implementieren und nicht von Thread erben. Wäre schöner für's Auge. ;) Das kannste ja dann selbst machen, wenn du diesen Code überhaupt gebrauchen kannst. :) Natürlich sollte man auch nicht, wie ich es damals machte, leere Strings zurück geben, wenn was schief läuft, sondern NULL. Aber das hatte damals bei mir schon seine speziellen Gründe, weiß die nur jetzt nicht mehr... ;) 'Ne HttpURLConnection kriegst du übrigens aus einem URL. Etwa so:
String link = "http://www.deineSeite.de"; // "http" nicht vergessen!

URL url = new URL(link);

HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();

Hoffe, das ist das, wonach du gesucht hast. :)

im prinzip reicht die URL Klasse. aus der URL kannst du die URLConnection beziehen, aus der Connection den Inputstream.

Den Inputstream in einen Inputstreamreader gegeben und das dann am besten in einen BufferedReader...und dann hast du den ganzen Quelltext dieser Datei.

habs ausprobiert. Probleme könntest du bekommen wenn dein Clientrechner mit Firewall oder Proxy versehen ist, die eine Internetverbindung nur auf explizite Freigabe (Username, Passwort im IE o.ä.) erlauben..... das habe ich noch nicht hinbekommen.

wenn dein Clientrechner mit Firewall oder Proxy versehen ist
Hinter einem Proxyserver saß ich damals auch. Allerdings bin ich ohne Probleme durch gekommen... ;) Dafür eben entsprechend die System-Properties anpassen.

Den Inputstream in einen Inputstreamreader gegeben und das dann am besten in einen BufferedReader...und dann hast du den ganzen Quelltext dieser Datei.
Großartig was Anderes is das ja auch nich in meinem Beispiel. :)

Und noch ein kleines post scriptum zu meinem (zugegebenermaßen nicht perfekten) Beispiel für die HttpURLConnection: Der String mit dem Link für den URL muss natürlich auf eine konkrete Datei verweisen, nicht auf eine ganze Web-Seite. Also sollte da eher sowas wie link="http://deineSeite.de/index.html" stehen.

So viel von mir.

Gruß.

Die Klasse File hat auch einen Konstruktor File(URI) nur bringt mich die Klasse URI auch nicht weiter weil ich damit scheinbar nur lokale Dateien spezifizieren kann.
Richtig, denn

public File(URI uri) Creates a new File instance by converting the given file: URI into an abstract pathname.

Was vielleicht noch, neben den Tips, die du schn bekommen hast ganz interessant sein könnte, ist ein HTTP Client Package, z.B.:

HTTPClient

http://jakarta.apache.org/commons/httpclient/

oder (was ich deutlich besser finde)

HTTPUnit

http://httpunit.sourceforge.net/

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.