2009-11-05 5 views

Répondre

21

La façon la plus simple de le faire serait de lire en utilisant des chemins de fichiers réguliers.

Sous Windows:

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

Sur Unix:

d'abord monter le partage en utilisant Samba (SMB, NFS ou tout autre protocole) à un certain endroit comme/mnt/réseau. Ensuite, vous pouvez utiliser:

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

Une fois que vous avez l'objet fichier, vous pouvez utiliser FileInputStream, FileReader ou tout ce que vous voulez lire le fichier en réponse

Modifier pour commentaires.. Si vous utilisez une applet, vous voulez probablement extraire le fichier d'un serveur Web. Vous pouvez utiliser le construit en classe java.net.URL mais je vous recommande si vous devez faire plus que choses simples: http://hc.apache.org/httpclient-3.x/index.html

Exemple (à partir du site HTTP Commons):

// 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

dans ce cas dois-je signer l'applet? – soField

+0

et je devrais utiliser le dossier partagé sans montage comme ip: // dossier, pensez-vous que java new File ("ip // dossier/fichier") est significatif – soField

+0

Y at-il une solution sur Linux qui ne nécessite pas le montage du partage? Je n'ai pas l'autorisation d'utiliser la commande mount, et si j'essaie d'utiliser la solution Windows, il crée un fichier dans le répertoire local avec des barres obliques dans le nom. – datguy

-3

Essayez l'URL suivant pour un tutoriel

Je pense que le meilleur moyen est d'utiliser java.net.URL pour ouvrir un InputSteam, car vous pouvez le généraliser aux fichiers qui ne sont pas nécessairement sur le même réseau.

0


Ce n'est pas si simple! Pour utiliser les applications Client Server, vous avez besoin d'une API réseau.
J'ai 1 par DeBukkit et une version étendue. Si vous voulez envoyer des fichiers, je vais suggérer mon (Server Client Extended .jar) car il ya une option pour envoyer des fichiers (FilePacket.java).
Ce sont les liens vers les libs: All Libs


code pour le serveur pour le serveur client étendu:

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 

    } 

} 

Code pour le 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(); 
    } 

} 


Vous avez besoin d'un seperated serveur + client Démarreur:

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(); 

    } 

} 
Questions connexes