【问题标题】:Sending files between computers over a network using java使用java通过网络在计算机之间发送文件
【发布时间】:2014-02-03 19:17:21
【问题描述】:

嘿, 我有一个项目,在序列化一组对象后,我必须将文件发送到同一网络上的另一台 PC。我用谷歌搜索了“java 网络”,但其中一些示例似乎相当复杂。实现这一目标的最简单方法是什么?除了对 IP 地址的基本了解之外,我几乎没有/没有网络经验。

【问题讨论】:

    标签: java networking file-transfer


    【解决方案1】:

    这取决于“发送文件”的含义。如果另一台 PC 有一个您可以通过网络看到的共享驱动器(例如在 Windows 资源管理器中),那么您可以复制它。 FTP 是另一个非常简单的常见选项。

    您还可以查看使用 RMI 将序列化数据发送到另一个 Java 进程。

    否则你可能不得不使用“复杂的方式”。您可能会发现它并不像您想象的那么复杂,您可以复制 examples 并将文件作为字节数组发送。

    【讨论】:

    • 真的吗?RMI 是最简单的?我会说这是比较困难的方法之一。
    • @MeBigFatGuy:我没说这是最简单的!但是 RMI 是在不同机器上的两个 java 进程之间进行通信的好方法,我一直都在使用它。对于发送文件的一次性任务,这可能是矫枉过正。
    • 操作要求最简单的。
    【解决方案2】:

    尝试查看Java RMI,尤其是关于通过网络发送序列化对象的部分。

    【讨论】:

    • 真的吗?RMI 是最简单的?我会说这是比较困难的方法之一。
    【解决方案3】:

    我会尝试通过 JMS 消息发送数据,例如 ActiveMQ。这样,生产者/消费者甚至不需要同时运行。

    这是一个例子http://www.javablogging.com/simple-guide-to-java-message-service-jms-using-activemq/

    【讨论】:

      【解决方案4】:

      点击下面的链接,您将获得一个通过 TCP 复制文件的示例。

      Link to example

      【讨论】:

        【解决方案5】:

        使用 Sockets,看看这个example

        【讨论】:

          【解决方案6】:

          您可以简单地为所有人创建一个共享文件夹,并让他们定期检查新文件。

          或者您可以编写自己的客户端服务器程序,以便所有客户端侦听服务器将向它们发送文件的特定端口。

          【讨论】:

            【解决方案7】:

            我建议在KryoNet 中使用 RMI(与传统 RMI 相比几乎没有设置)和RMIIO

            【讨论】:

              【解决方案8】:

              简单的 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 camel 来访问计算机之间同一网络中的文件

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

              }

              【讨论】:

                【解决方案9】:

                如果你对 Spring 和 Maven 有一点经验,我会选择 Apache Camelhere is a example 如何通过 FTP 从 java 程序发送文件到 FTP 服务器(几乎没有 Spring 的帮助),但是 Apache Camel了解很多协议,例如普通文件复制、通过邮件发送、通过消息队列...我真的认为 Apache Camel 中缺少通过信鸽的传输。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-07-04
                  • 2011-04-30
                  • 1970-01-01
                  • 2012-09-25
                  • 1970-01-01
                  相关资源
                  最近更新 更多