2009-11-05 3 views
9

からファイルを誰かがこれを行うための最も簡単な方法は、読むことであろう、私は同じネットワークJavaは、ネットワークデバイス

+1

ファイルにアクセスするにはどうすればよいですか? HTTP? NFS?サンバ? FTP? – Asaph

答えて

21

ある任意のマシンからファイルを読み込む

ためのチュートリアルやサンプルJavaコードを見つけるのを助けることができます読んで通常のファイルパスを使用します。 Windowsでは

:Unixでは

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

ファーストを/ mnt /ネットワークのようないくつかの場所にサンバ(SMB、NFSまたは他のどんなプロトコル)を使用して共有をマウント。次に、あなたが使用することができます。

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

を使用すると、Fileオブジェクトはあなたが内のファイルを読みたいのFileInputStream、FileReaderのか、他に何を使用することができたら

コメント応答の編集。アプレットを使用している場合は、おそらくWebサーバーからファイルを取得する必要があります。あなたはのjava.net.URLクラスに組み込まれて使用することができますが、あなただけのシンプルなものよりもしなければならない場合、私はこれをお勧めします:http://hc.apache.org/httpclient-3.x/index.html

例(コモンズHTTPサイトから):

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

この場合、私はアプレットに署名する必要がありますか? – soField

+0

と私はip://フォルダのようなマウントなしで共有フォルダを使用する必要があります、Javaの新しいファイル( "ip // folder/file")は意味があると思いますか? – soField

+0

共有のマウントを必要としないLinuxのソリューションはありますか? mountコマンドを使用する権限がありません.Windowsソリューションを使用しようとすると、名前にスラッシュを含むローカルディレクトリにファイルが作成されます。 – datguy

-3

てみてくださいチュートリアルhttp://www.roseindia.net/java/beginners/construct_file_name_path.shtml

は、次のURL私は最善の方法は、あなたが同じネットワーク上にある必要はありませんファイル、それを一般化することができますので、InputSteamを開くためにjava.net.URLを使用することだと思います。

0


これは簡単ではありません。 Server Client Aplicationsを使用するには、Network APIが必要です。
私はDeBukkitと拡張バージョンで1を持っています。ファイルを送信する場合は、ファイル(FilePacket.java)を送信するオプションがあるので、私は自分のもの(Server Client Extended .jar)を提案します。 All Libs


コード拡張クライアントサーバー用のサーバー用:クライアントの

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 

    } 

} 

コード:

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

} 


あなたが区切らサーバー+クライアントを必要とする
これはLIBSへのリンクです初心者:

package com.bebukkit.niton.network.test; 

public class ServerStarter { 

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

} 

クライアント:

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

    } 

} 
関連する問題