Отправка файлов между компьютерами по сети с использованием Java - PullRequest
0 голосов
/ 19 апреля 2011

Эй, У меня есть проект, в котором после сериализации массива объектов я должен отправить файл на другой компьютер в той же сети. Я погуглил "Java-сеть", но некоторые примеры кажутся довольно сложными. Какой самый простой способ достижения этого? У меня мало опыта работы с сетями, кроме базового понимания IP-адресов.

Ответы [ 9 ]

2 голосов
/ 19 апреля 2011

Это зависит от того, что вы подразумеваете под «отправить файл».Если на другом компьютере есть общий диск, который вы можете видеть по сети (например, в проводнике Windows), вы можете просто скопировать его.FTP является еще одним распространенным вариантом, который будет довольно простым.

Вы также можете посмотреть на использование RMI для отправки сериализованных данных другому процессу Java.

В противном случае вам, возможно, придется использовать «сложный способ».Вы, вероятно, обнаружите, что это не так сложно, как вам кажется, что вы копируете examples и отправляете файл в виде массива байтов.

1 голос
/ 19 апреля 2011

Используйте сокеты, посмотрите на этот пример

1 голос
/ 19 апреля 2011

Перейдите по ссылке ниже, и у вас есть пример копирования файла по TCP.

Ссылка на пример

1 голос
/ 19 апреля 2011

Я бы попытался отправить данные через JMS, например ActiveMQ .Таким образом, производителю / потребителю даже не нужно работать одновременно.

Вот пример http://www.javablogging.com/simple-guide-to-java-message-service-jms-using-activemq/

1 голос
/ 19 апреля 2011

Попробуйте взглянуть на Java RMI , особенно немного о передаче сериализованных объектов по сети.

0 голосов
/ 03 февраля 2014

Простой 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();
}

}

0 голосов
/ 19 апреля 2011

Если у вас небольшой опыт работы с Spring и Maven, я бы выбрал Apache Camel , . Вот пример как отправить файл через FTP из Java-программы на FTPсервер (с небольшой помощью от Spring), но Apache Camel понимает протоколы LOT, например, обычное копирование файлов, отправка по почте, через очередь сообщений ... Я действительно считаю, что в Apache Camel отсутствует только передача через почтового голубя.

0 голосов
/ 19 апреля 2011

Я бы порекомендовал использовать RMI в KryoNet (который имеет небольшие настройки по сравнению с традиционными RMI) с RMIIO .

0 голосов
/ 19 апреля 2011

Вы можете просто создать общую папку для всех них и позволить им периодически проверять наличие новых файлов.

Или вы можете написать свою собственную программу клиент-сервер, чтобы все клиенты прослушивали определенный порт, на который сервер будет отправлять им файл.

...