使用java通过网络在计算机之间发送文件

时间:2011-04-19 12:12:03

标签: java networking file-transfer

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

9 个答案:

答案 0 :(得分:2)

这取决于“发送文件”的含义。如果其他PC具有可通过网络查看的共享驱动器(例如,在Windows资源管理器中),则可以复制它。 FTP是另一种非常简单的常用选项。

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

否则你可能不得不使用“复杂的方法”。您可能会发现它并不像您认为的那样复杂examples并将文件作为字节数组发送。

答案 1 :(得分:1)

尝试查看Java RMI,特别是关于通过网络发送序列化对象的内容。

答案 2 :(得分:1)

我会尝试通过ActiveMQ之类的JMS消息传递数据。这样生产者/消费者甚至不需要同时运行。

以下是http://www.javablogging.com/simple-guide-to-java-message-service-jms-using-activemq/

的示例

答案 3 :(得分:1)

请按照以下链接,您有一个通过TCP进行文件复制的示例。

Link to example

答案 4 :(得分:1)

使用套接字,看看这个example

答案 5 :(得分:0)

您只需为所有这些文件创建共享文件夹,并让他们定期检查新文件。

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

答案 6 :(得分:0)

我建议使用KryoNet中的RMI(与传统RMI相比设置较少)与RMIIO

答案 7 :(得分: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 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();
}

}

答案 8 :(得分:-1)

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