Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java通过网络在计算机之间发送文件_Java_Networking_File Transfer - Fatal编程技术网

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

使用java通过网络在计算机之间发送文件,java,networking,file-transfer,Java,Networking,File Transfer,哎,, 我有一个项目,在序列化一系列对象后,我必须将文件发送到同一网络上的另一台PC。我在谷歌上搜索过“java网络”,但其中一些例子似乎相当复杂。实现这一目标的最简单方法是什么?除了对IP地址的基本了解之外,我几乎没有网络经验 试着看一看,特别是关于通过网络发送序列化对象的部分。试着看一看,特别是关于通过网络发送序列化对象的部分。这取决于“发送文件”的含义。如果另一台电脑有一个共享驱动器,您可以通过网络(例如在Windows资源管理器中)看到该驱动器,则您可以复制该驱动器。FTP是另一个非常简

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

试着看一看,特别是关于通过网络发送序列化对象的部分。

试着看一看,特别是关于通过网络发送序列化对象的部分。

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

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


否则,您可能不得不使用“复杂方式”。您可能会发现,它并不像您想象的那样复杂,而是复制并以字节数组的形式发送文件。

这取决于您所说的“发送文件”是什么意思。如果另一台电脑有一个共享驱动器,您可以通过网络(例如在Windows资源管理器中)看到该驱动器,则您可以复制该驱动器。FTP是另一个非常简单的常用选项

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


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

您只需为所有文件创建一个共享文件夹,并让它们定期检查新文件即可


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

您只需为所有客户机创建一个共享文件夹,并让他们定期检查新文件即可


或者,您可以编写自己的客户机-服务器程序,以便所有客户机在服务器将向其发送文件的特定端口上进行侦听。

我建议使用RMI in(与传统RMI相比,它的设置很少)。

我建议使用RMI in(与传统RMI相比,它的设置很少)使用。

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


下面是一个示例

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


下面是一个示例

按照下面的链接,您就有了一个通过TCP进行文件复制的示例


按照下面的链接,您可以看到一个通过TCP进行文件复制的示例


如果您对Spring和Maven有一点经验,我会选择,如何通过FTP将文件从java程序发送到FTP服务器(Spring没有什么帮助),但Apache Camel了解很多协议,例如纯文件复制、通过邮件发送、通过消息队列发送。。。我真的认为Apache Camel中缺少了通过信鸽传输的功能。

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

使用套接字,看看这个

使用套接字,看看这个

简单的java代码可以通过网络在计算机之间移动文件

公共类文件复制器{

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

否则,您也可以使用ApacheCamel在计算机之间访问同一网络中的文件

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

}

简单的java代码将用于通过网络在计算机之间移动文件

公共类文件复制器{

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

否则,您也可以使用ApacheCamel在计算机之间访问同一网络中的文件

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

}

真的吗?RMI是最简单的吗?我认为这是比较困难的方法之一。真的吗?RMI是最简单的吗?我认为这是比较困难的方法之一。真的吗?RMI是最简单的吗?我会说这是最困难的方法之一。@MeBigFatGuy:我没说这是最简单的!但是RMI是在不同机器上的两个java进程之间进行通信的好方法,我一直在使用它。对于发送一个文件的一次性任务来说,这可能有些过分。op要求的是最简单的。真的吗?RMI是最简单的吗?我会说这是最困难的方法之一。@MeBigFatGuy:我没说这是最简单的!但是RMI是在不同机器上的两个java进程之间进行通信的好方法,我一直在使用它。对于发送文件的一次性任务来说,这可能有些过分。op要求提供最简单的解决方案。