Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Trasferire un file in java.

    Ciao a tutti, praticamente devo trovare un modo per trasferire un file su una macchina da un altra. sulla macchina che invia ho un applicazione che tramite java mi dovrebbe copiare un file in una directory dell'altra. ho visto che esistono delle classi client-server che fanno una cosa simile, solo che a me serve solo la parte diciamo client. Ho pensato di utilizzare ssh ma non so dove mettere mano. Qualcuno può aiutarmi?? help

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,317
    Piano.
    Un'applicazione client/server è necessaria solo se non hai modo di condividere delle risorse fra le macchine...

    Spiega un po' meglio qual è la tua situazione: se stai lavorando all'interno di una rete e hai delle risorse condivise (quindi, cartelle condivise di Windows o directory condivise via SAMBA, ecc) non hai alcun bisogno di applicazioni client/server... è sufficiente una semplice copia su directory di rete.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    ho una macchina dove gira un'applicazione web. io tramite questa applicazione dovrei copiare dei file su un'altra macchina che si trova sulla stessa rete.

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,317
    E fin qua non c'erano dubbi.
    Quello che volevo capire era qual è la situazione a livello di risorse e di sistema operativo.

    Comunque, supponendo che la tua situazione sia la seguente:

    Nome macchina di destinazione: HOST_DST
    Nome della directory condivisa: destinazione

    Tutto quello che dovrai fare è aprire il file di origine in lettura e quello di destinazione in scrittura, quindi leggere il file di origine e scrivere i dati letti su quello di destinazione:

    codice:
    byte[] buffer = new byte[4096];   // 4KB di buffer...
    int byteLetti = 0;
    
    // Apro il file di origine
    FileInputStream fis = new FileInputStream( file di origine );
    
    // Apro il file di destinazione
    FileOutputStream fos = new FileOutputStream( "//HOST_DST/destinazione/file di destinazione" );
    
    // Leggo e scrivo
    while((byteLetti = fis.read(buffer)) >= 0) {
       fos.write(buffer, 0, byteLetti);
    }
    
    // Chiudo il file di destinazione
    fos.close();
    
    // Chiudo il file di origine
    fis.close();
    Ho ovviamente tralasciato tutta la gestione delle eccezioni.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    perfetto, e per creare il file di destinazione??

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,317
    Originariamente inviato da flavio841
    perfetto, e per creare il file di destinazione??
    Il codice che ti ho postato fa già tutto: legge il file di origine e scrive (quindi crea) su quello di destrinazione.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Originariamente inviato da flavio841
    perfetto, e per creare il file di destinazione??


    ma scusa un secondo, se io voglio creare un file su un altro host non devo passargli come parametri di connessione user e passwd?? e diciamo anche se creare una connessione in ftp o ssh??
    adesso ho questa classe:

    codice:
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    	// definiamo la classe principale
    	public class LetturaFile
    	{
    	  public static void main(String[] args)
    	  {    
    	      try {
    	        FileOutputStream file = new FileOutputStream("/opt/TEST/file.txt");
    	        
    	        byte[] buffer = new byte[4096]; 
    			  int byteLetti = 0;
    
    			  FileInputStream fis = new FileInputStream("C:/prova_trasferimento.txt");
    			  
    			  while((byteLetti = fis.read(buffer)) >= 0) {
    			     file.write(buffer, 0, byteLetti);
    			  }
    
    			  // Chiudo il file di destinazione
    			  file.close();
    
    			  // Chiudo il file di origine
    			  fis.close();
    	        
    	        
    	      } catch (IOException e) {
    	        System.out.println("Errore: " + e);
    	        System.exit(1);
    	      }
         
    	    } 
    }
    se invece di creare il file in
    codice:
     FileInputStream fis = new FileInputStream("C:/prova_trasferimento.txt");
    lo volessi creare in una macchina remota in modo da avere una cosa simile
    codice:
     FileInputStream fis = new FileInputStream("xxx.xxx.xxx.xxx:yy/C:/prova_trasferimento.txt");
    come devo fare????

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,317
    Erano le informazioni che volevo che mi dicessi all'inizio.
    La mia soluzione non va bene se i due host non sono nella stessa rete e/o non hanno risorse condivise (le risorse condivise non necessitano di un nome utente/password per accedervi, se non all'atto della loro apertura, cosa che esula da Java).

    Se il tuo intento è quello di trasferire un file usando un determinato protocollo (FTP, SSH, Quel che vuoi), la soluzione da me proposta non fa al caso tuo. In questo caso dovrai obbligatoriamente utilizzare una struttura client/server (il server si suppone esista già: ovvero sulla macchina host dall'altra parte ci sarà già un server FTP, SSH o quant'altro che risponde alle richieste).

    Quello che dovrai fare è aprire una socket verso quell'host, alla porta specificata e comunicare con il server dall'altra parte usando il suo linguaggio: se comunichi con un server FTP utilizzerai il protocollo FTP (quindi i comandi FTP), se comunichi tramite SSH utilizzerai il protocollo SSH (quindi i suoi comandi), ecc.

    L'approcio è, ovviamente, del tutto diverso da quello indicato da me.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,317
    Aggiungo una cosa. Cercando in questo forum con chiave "SSH", saltano fuori queste discussioni, che potrebbero esserti utili in tal senso:

    http://forum.html.it/forum/showthrea...readid=1319042
    http://forum.html.it/forum/showthrea...readid=1260611
    http://forum.html.it/forum/showthrea...readid=1283017
    http://forum.html.it/forum/showthrea...readid=1148152


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  10. #10
    grandi... ci sono riuscito... grazie grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.