2009-11-05 16 views

risposta

21

Il modo più semplice per farlo sarebbe quello di leggere usando normali percorsi di file.

Su Windows:

new File("\\\\server\\path\\to\\file.txt") 
// (double-backslashes required for backslashes in path) 

In Unix:

Prima montare la condivisione tramite Samba (SMB, NFS o qualunque altro protocollo) in una certa posizione, come/mnt/network. Quindi è possibile utilizzare:

new File("/mnt/network/path/to/file.txt") 

Una volta ottenuto l'oggetto File è possibile utilizzare FileInputStream, FileReader o qualsiasi altra cosa che si desidera leggere il file in

Modifica per la risposta commenti.. Se si utilizza un'applet, è probabile che si desideri estrarre il file da un server Web. È possibile utilizzare il costruito in classe java.net.URL ma mi sento di raccomandare questo se si deve fare di più che solo roba semplice: http://hc.apache.org/httpclient-3.x/index.html

Esempio (dal Commons HTTP del sito):

// Create an instance of HttpClient. 
    HttpClient client = new HttpClient(); 

    // Create a method instance. 
    GetMethod method = new GetMethod(url); 

    try { 
     // Execute the method. 
     int statusCode = client.executeMethod(method); 

     if (statusCode != HttpStatus.SC_OK) { 
     System.err.println("Method failed: " + method.getStatusLine()); 
     } 

     // Read the response body. 
     byte[] responseBody = method.getResponseBody(); 

     // Deal with the response. 
     // Use caution: ensure correct character encoding and is not binary data 
     System.out.println(new String(responseBody)); 

    } catch (HttpException e) { 
     System.err.println("Fatal protocol violation: " + e.getMessage()); 
     e.printStackTrace(); 
    } catch (IOException e) { 
     System.err.println("Fatal transport error: " + e.getMessage()); 
     e.printStackTrace(); 
    } finally { 
     // Release the connection. 
     method.releaseConnection(); 
    } 
    } 
} 
+0

in questo caso devo firmare l'applet? – soField

+0

e dovrei usare la cartella condivisa senza montare come ip: // cartella, pensi che java new File ("ip // folder/file") abbia significato – soField

+0

Esiste una soluzione su Linux che non richiede il montaggio della condivisione? Non ho il permesso di usare il comando mount, e se provo a usare la soluzione Windows, crea un file nella directory locale con le barre nel nome. – datguy

0


Non è così semplice! Per utilizzare le applicazioni client del server è necessaria un'API di rete.
Ho 1 di DeBukkit e una versione estesa. Se si desidera inviare file, suggerirò il mio (Server Client .jar esteso) perché esiste un'opzione per l'invio di file (FilePacket.java).
Questo sono i link alle librerie: All Libs


Codice per Server per Client Server estesa:

public class TestServer extends Server { 

    public TestServer() { 
     super(29898, true, true,true); 
     registerMethod("bt", new FileReciver() { 

      @Override 
      public void onCompleteRecive(FileInfo data) { 
       System.out.println("Completely recived : "+data); 
       Path p = Paths.get(data.getName()); 
       try { 
        Files.createFile(p); 
        Files.write(p, data.getContent()); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
      /** 
      * @see com.bebukkit.niton.network.packets.buffer.BufferedPacketReciver#run(com.bebukkit.niton.network.packets.Packet, java.net.Socket) 
      */ 
      @Override 
      public void run(Packet<? extends Serializable> msg, Socket socket) { 
       super.run(msg, socket); 
       sendMessage(new Packet<Boolean>("", null), socket); 
      } 
     }); 
    } 

    @Override 
    public void preStart() 
    { 
     registerMethod("msg", new ReciveMethod() { 

      @Override 
      public void run(Packet<? extends Serializable> msg, Socket socket) { 
       broadcastMessage(msg); 
      } 
     }); 
    } 

    @Override 
    public void onWrongDataPacketException(ClassNotFoundException e) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onReceivePacketError(IOException e) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onPacketReckognized(ServerSocket socket) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onPacketSendException(Exception e, Packet<? extends Serializable> message, Socket socket2) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onSendPacketToNotConnectedClient(Packet<? extends Serializable> message, Socket socket2) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onBrodcast(Packet<? extends Serializable> pack) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onServerStartError(IOException e) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onServerStop() { 
     // TODO Auto-generated method stub 

    } 

} 

Codice for Client:

package com.bebukkit.niton.network.test; 

import java.io.IOException; 
import java.io.Serializable; 
import java.net.Socket; 
import java.util.Scanner; 

import com.bebukkit.niton.network.Client; 
import com.bebukkit.niton.network.packets.Packet; 
import com.bebukkit.niton.network.packets.ReciveMethod; 

public class TestClient extends Client { 

    public TestClient() { 
     super("localhost", 29898, 5000, false,true); 
     registerMethod("msg", new ReciveMethod() { 

      @Override 
      public void run(Packet<? extends Serializable> msg, Socket socket) { 
       System.out.println(msg.getData()); 
      } 
     }); 
     registerMethod("replay", new ReciveMethod() { 

      @Override 
      public void run(Packet<? extends Serializable> msg, Socket socket) { 
       System.out.println("REREplay"); 
      } 
     }); 
    } 

    @Override 
    public void onSocketClosingFail() { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onLoginPacketSendingFailed(IOException ex) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onConnectionError(IOException ex) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onMessageReciveError(Exception ex) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onPacketSendError(Exception ex, Packet<? extends Serializable> pack) { 
     // TODO Auto-generated method stub 

    } 
    @Override 
    public void start() { 
     super.start(); 
    } 

} 


Avete bisogno di un seperated server + client Starter:

package com.bebukkit.niton.network.test; 

public class ServerStarter { 

    public static void main(String[] args) { 
     new TestServer(); 
    } 

} 

Client:

package com.bebukkit.niton.network.test; 

import java.io.File; 
import java.io.IOException; 
import java.nio.file.Files; 

import javax.swing.JFileChooser; 

import com.bebukkit.niton.network.packets.Packet; 
import com.bebukkit.niton.network.packets.buffer.BufferedPacket; 
import com.bebukkit.niton.network.packets.file.FileInfo; 
import com.bebukkit.niton.network.packets.file.FilePacket; 

public class ClientStarter { 

    public static void main(String[] args) throws IOException { 
     TestClient tc = new TestClient(); 
     tc.start(); 

     new Thread(new Runnable() { 

      @Override 
      public void run() { 
       try { 
        Thread.sleep(3000); 
       } catch (InterruptedException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
       JFileChooser c = new JFileChooser("Choose a file to upload"); 
       c.setFileSelectionMode(JFileChooser.FILES_ONLY); 
       c.showDialog(null,"Upload"); 
       File f = c.getSelectedFile(); 
       try { 
        tc.sendMessage(new FilePacket("file", f)); 
        tc.sendMessage(new Packet<String>("replay","test")); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
     }).start(); 

    } 

} 
Problemi correlati