Zum Inhalt springen

File Download mit Java Applikation


HuDeanY

Empfohlene Beiträge

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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. :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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ß.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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/

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...