Comment télécharger un fichier depuis un programme

Résolu
TheKill_TnT Messages postés 154 Date d'inscription   Statut Membre Dernière intervention   -  
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

Je faisais comme ça un petit programme Java de memory, et au collège pendant le club phy/chimie/informatique, je codais un peu sur un ide en ligne, j'avais fais un petit programme marrant bon voilà quoi, et le prof m'a demandé si j'avais déjà codé d'autres plus gros projets et blabla, donc je me suis dit "Ok, si je garde le Memory sur mon dossier personnel du serveur du collège, ça devrais aller" mais là je me dis "pourquoi ne pas faire une mise à jour automatique ?", donc je m'y suis mis...

Mais c'est galère, je ne sait pas comment dire à mon programme de chercher le fichier sur mon site et de le télécharger :/
J'ai tenter un URI dans le chemin du fichier mais "sheme" ne serait pas "file"...

Si quelqu'un pouvais m'aider ça serait super :D

A voir également:

2 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Bonjour,

Je n'ai pas bien compris dans quel sens tu veux faire ta "mise à jour".
Tu as un programme qui tourne (où ?) et qui devrait mettre à jour (quoi ?) à partir d'un site web ?

Pour télécharger un fichier tu dois pouvoir faire comme ceci :

import java.io.IOException;
import java.net.URL;
import java.nio.file.*;

public class Test {
    public static void main(String args[]) throws IOException {
        Files.copy(
            new URL("http://monSite/monFichier").openStream(),
            Paths.get("C:/monFichier"),
            StandardCopyOption.REPLACE_EXISTING);
    }
}

Voir la documentation : public static long copy​(InputStream in, Path target, CopyOption... options)

Remarque : "si je garde le Memory sur mon dossier personnel du serveur du collège, ça devrais aller"
Tu risques de le perdre tôt ou tard. Il vaudrait mieux stocker ton code sur un site dédié (Gitlab par exemple).
1
TheKill_TnT Messages postés 154 Date d'inscription   Statut Membre Dernière intervention   33
 
Nen mais tout le code l'IDE ect est géré sur mon PC chez moi et c'est justement ça: J'aimerais que dès que depuis chez moi je change le code (et donc le programme dans mon site), quand je reviens au collège et que je le démarre mon programme depuis le collège ça cherche la mise à jour sur mon site, et ça remplace le fichier au collège par celui de mon site...

D'impression le code que tu m'as envoyé me parait plus ou moins adapté justement à ce que je cherche à faire, j'éssaye et je t'en dis des nouvelles
0
TheKill_TnT Messages postés 154 Date d'inscription   Statut Membre Dernière intervention   33
 
Connection refusée
Jusque là, je pense savoir pourquoi: j'héberge le site web sur mon PC. Je vais essayer un accès via Localhost...
0
TheKill_TnT Messages postés 154 Date d'inscription   Statut Membre Dernière intervention   33
 
mai 19, 2018 8:22:25 PM memory.start main
GRAVE: null
java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at java.net.Socket.connect(Socket.java:538)
at sun.net.NetworkClient.doConnect(NetworkClient.java:180)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:463)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:558)
at sun.net.www.http.HttpClient.<init>(HttpClient.java:242)
at sun.net.www.http.HttpClient.New(HttpClient.java:339)
at sun.net.www.http.HttpClient.New(HttpClient.java:357)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1220)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1156)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1050)
at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:984)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1564)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492)
at java.net.URL.openStream(URL.java:1045)
at memory.update.installUpdate(update.java:92)
at memory.start.main(start.java:36)


(Et un System.exit(?); intégré au report de l'érreur ce qui empêche le programme de continuer)
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020 > TheKill_TnT Messages postés 154 Date d'inscription   Statut Membre Dernière intervention  
 
Si tu héberges ton site uniquement en localhost tu ne pourras pas y accéder depuis ton collège...
Cependant sur ta machine ça devrait fonctionner, j'ai fait le test chez moi
"http://localhost:8080/site/fichier"
ok.

Je parlais de Gitlab tout à l'heure. C'est le genre de site qui pourrait te permettre de mettre en ligne ton fichier et sur lequel ton programme pourrait se connecter pour se mettre à jour, même si ton site perso n'est pas disponible.

Remarque : fermer le programme si la mise à jour échoue c'est un peu violent. Je pense que tu devrais laisser le programme s'exécuter normalement après, au pire ce sera avec la version non à jour du fichier...
0
TheKill_TnT Messages postés 154 Date d'inscription   Statut Membre Dernière intervention   33
 
"fermer le programme si la mise à jour échoue c'est un peu violent"
C'est pas moi qui mets un System.exit !
"Je parlais de Gitlab tout à l'heure. C'est le genre de site qui pourrait te permettre de mettre en ligne ton fichier et sur lequel ton programme pourrait se connecter pour se mettre à jour, même si ton site perso n'est pas disponible. " Ah ! Interessant. Pour le localhost en fait c'était déjà en localhost, mais ce n'est pas grave.
Cherchant un cloud qui offre un lien fixe pour la mise à jour de fichier, ta proposition de Gitlab me parrait interressante^^
0
TheKill_TnT Messages postés 154 Date d'inscription   Statut Membre Dernière intervention   33
 
Résolu. Merci à KX.
0