2011-04-19 74 views
0

嘿, 我有一個項目,在序列化一個對象數組後,我必須將文件發送到同一網絡上的另一臺PC。我搜索了「java聯網」,但一些例子看起來很複雜。實現這個最簡單的方法是什麼?除了對IP地址的基本理解之外,我幾乎沒有網絡經驗。通過使用java的網絡在計算機之間發送文件

回答

-1

如果你有Spring和Maven的一點點經驗,我將與Apache Camelhere is a example去如何通過FTP從Java程序發送文件到FTP服務器(從春季幫助不大),但Apache Camel理解LOT協議,例如純文件複製,通過郵件發送,通過消息隊列......我真的認爲僅僅通過運營鴿子的傳輸在Apache Camel中是缺失的。

1

試試看看Java RMI,特別是關於通過網絡發送序列化對象的位。

+1

訪問文件真的?RMI是最簡單的嗎?我會說這是更困難的方法之一。 – MeBigFatGuy 2011-04-19 12:20:23

2

這取決於你的意思是「發送文件」。如果另一臺PC具有可以通過網絡看到的共享驅動器(例如在Windows資源管理器中),那麼您可以將其複製。 FTP是另一個很常見的選項,非常簡單。

您還可以看看使用RMI將序列化數據發送到另一個Java進程。

否則,您可能不得不使用「複雜的方式」。您可能會發現它並不像您認爲複製examples那樣複雜,而是以字節數組的形式發送文件。

+2

真的嗎?,RMI是最簡單的嗎?我會說這是更困難的方法之一。 – MeBigFatGuy 2011-04-19 12:20:41

+0

@MeBigFatGuy:我沒有說這是最簡單的!但是RMI是在不同機器上的兩個java進程之間進行通信的好方式,我一直都在使用它。對於發送文件的一次性任務來說,這可能是矯枉過正的。 – brain 2011-04-19 12:33:31

+0

該op要求最簡單。 – MeBigFatGuy 2011-04-19 13:27:54

0

您可以簡單地爲它們創建一個共享文件夾,讓它們定期檢查新文件。

或者您可以編寫自己的客戶端服務器程序,以便所有客戶端都可以偵聽服務器將發送文件的特定端口。

0

我推薦使用KryoNet(與傳統RMI相比幾乎沒有設置)的RMI與RMIIO

1

使用套接字,看看這個example

0

簡單的Java代碼將用於在網絡上的移動計算機之間的文件。

公共類FileCopier {

public static void main(String args[]) throws Exception { 
//give your files location anywhere in same network 
File inboxDirectory = new File("data/inbox");  
//give your output location anywhere in same network where you want to save/copy files 
File outboxDirectory = new File("data/outbox"); 

    outboxDirectory.mkdir(); 

    File[] files = inboxDirectory.listFiles(); 
    for (File source : files) { 
     if (source.isFile()) { 
      File dest = new File(
        outboxDirectory.getPath() 
        + File.separator 
        + source.getName()); 
      copyFile(source, dest); 
     } 
    } 
} 

private static void copyFile(File source, File dest) 
    throws IOException { 
    OutputStream out = new FileOutputStream(dest); 
    byte[] buffer = new byte[(int) source.length()]; 
    FileInputStream in = new FileInputStream(source); 
    in.read(buffer); 
    try { 
     out.write(buffer); 
    } finally { 
     out.close();  
     in.close(); 
    } 
} 

}

否則你也可以使用Apache的駱駝在計算機之間進行同一網絡

public class FileCopierWithCamel { 

public static void main(String args[]) throws Exception { 

    CamelContext context = new DefaultCamelContext(); 


    context.addRoutes(new RouteBuilder() { 
     public void configure() { 
      // from("file:data/inbox?noop=true").to("file:data/outbox"); 
      from("file:data/inbox?noop=true").to("file:\\\\OthermachineName\\Output?autoCreate=true"); 
     } 
    }); 


    context.start(); 
    // Thread.currentThread().join(); 
    Thread.sleep(10000); 


    context.stop(); 
} 

}

相關問題