Передача файла через сокет - PullRequest
4 голосов
/ 07 января 2010

Я нашел этот код ведьма, которую я пытался, и она прекрасно работает, но (!). Я хочу сохранить файл в папке, которую я выберу, а также получить ее из папки, которую я снова выберу. Поскольку отправитель получает аргумент, я полагаю, что если я приведу аргумент, такой как /home/user/test.txt, то все в порядке, и все будет хорошо, но я не понимаю, как сохранить файл в определенной папке ( Серверная часть другими словами). Есть идеи?

Если я ошибаюсь в аргументации, пожалуйста, обязательно поправьте меня: D

PS: он отлично работает для папки по умолчанию Netbeans (без указания папки для отправителя или сервера).

Любая помощь приветствуется.

1 Ответ

5 голосов
/ 07 января 2010

Честно говоря, хотя я чувствую себя плохо, выполняя домашнее задание, у меня просто хорошее настроение :) 1001 *

В приведенном ниже коде (FileReciever) я добавил новую переменную папку, которая инициализируется из первого аргумента, переданного main (). Таким образом, имя папки, в которую вы хотите сохранить файл, должно быть передано в качестве первого аргумента. Единственная другая строка, которую я изменил: Файл файл = новый файл (папка, имя_файла);

private String folder = "";
public static void main(String[] args) {
try {
  folder = args[0];
  ServerSocket listener = new ServerSocket(port);

  while (true) {
    FileReceiver file_rec = new FileReceiver();
    file_rec.socket = listener.accept();  

    new Thread(file_rec).start();
  }
}
catch (java.lang.Exception ex) {
  ex.printStackTrace(System.out);
}

}

public void run() {
    try {
      InputStream in = socket.getInputStream();


  int nof_files = ByteStream.toInt(in);

  for (int cur_file=0;cur_file < nof_files; cur_file++) {
    String file_name = ByteStream.toString(in);

    File file=new File(folder, file_name);

    ByteStream.toFile(in, file);
  }
}
catch (java.lang.Exception ex) {
  ex.printStackTrace(System.out);
}

}

...