2011-04-19 73 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(); 
} 

}

相关问题