Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Работа с сетью > передача файла


Автор: #Maestro# 3.6.2009, 10:19
господа, можно передать файл (File f) таким обaрзом?

Код

SocketChannel channel = SocketChannel.open(new InetSocketAddress("192.168.0.2", 23));

OutputStream out = Channels.newOutputStream(channel);

а вот дальше не понимаю - как реализовать передачу объекта типа File?

Автор: Girin 9.6.2009, 20:23
Примерно как то так:

Код

File file = new File("filename");
Long len=file.length();
FileChannel wChannel = new FileOutputStream(file, false).getChannel();
ByteBuffer bbuf = ByteBuffer.allocate(len.intValue());
//читаем из файла
wChannel.read(bbuf);
 //пишем в сокет
channel.write(bbuf);
// закрываем файл
wChannel.close();

Возможно есть и более элегатное решение

Автор: #Maestro# 16.6.2009, 11:06
спосибо! но вы проверяли этот код? интересно - такой код станет адекватно работать?
Код

File file = new File("C:\\workbook.xml").getAbsoluteFile();
Long len=file.length();
FileChannel wChannel = new FileOutputStream("C:\\workbook.xml").getChannel();
ByteBuffer bbuf = ByteBuffer.allocate(len.intValue());

а в строке 
Код

wChannel.read(bbuf); 

срабатывает исключение 
Код

java.nio.channels.NonReadableChannelException
        at sun.nio.ch.FileChannelImpl.read(FileChannelImpl.java:137)

почему?


и не подскажете - какой в этом случае должен быть код на серверном приложении? кроме:
Код

ServerSocket s = new ServerSocket(23);      //23-й порт уже чем-то используется, поэтому я изменил 
                                                                                                                                                //23 нa  8823
Socket incoming = s.accept;

            try
            {
            BufferedReader in = new BufferedReader(new InputStreamReader(incoming.getInputStream()));

......?????.......

 in.close();
 }
    catch(IOException e) {e.printStackTrace();}



Автор: Girin 16.6.2009, 17:23

Цитата(#Maestro# @  16.6.2009,  11:06 Найти цитируемый пост)
срабатывает исключение 
код Java
1:
2:
java.nio.channels.NonReadableChannelException
        at sun.nio.ch.FileChannelImpl.read(FileChannelImpl.java:137)

почему?


Я не проверял, код посему извиняюсь. Нужно использовать FileInputStream для чтения

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)