2015-07-13 96 views
0

我有一个客户端和一个服务器。服务器维护一个文件,客户端为它做请求。 所以,我做的是通过java中的套接字发送文件

File CONFIGURATION_FILE=new File(configuration.doc); 
System.out.println (CONFIGURATION_FILE.exist()); //return true 

in=new BufferedReader(new InputStreamReader(socket.getInputStream())); 
oos=new ObjectOutputStream(socket.getOutputStream()); 

String line; 
while ((line=in.readLine())!=null) { 

    if (line.equals("configuration file")) 
     oos.writeObject(CONFIGURATION_FILE); 
     oos.flush(); 
    } 
} 

当我在客户端上接收文件时,它抛出IOException。如果我在创建文件时传递绝对路径,程序将工作(客户端和服务器暂时在同一台计算机上,所以我认为通过套接字传递的是对路径的引用,并且客户端和服务器可以看到)。我的问题是:是否可以通过套接字通道直接发送一个文件作为对象,或者我必须将其转换为一个字节数组并发送此数组?预先感谢您

+2

File对象是文件和目录路径名的抽象表示('javadoc)。所以不,你不能通过套接字发送它。您可以使用NIO来简化流的处理。 – meskobalazs

+2

'File'确实应该叫做'Path',但现在修复它已经太迟了。 – immibis

回答

0

您需要将其转换为字节并发送字节。例如,您的服务器可能具有F:/Out.txt中的文件,因此如果您将实际文件对象发送给客户端,则客户端可能根本没有F:驱动器。此外,File类使用了很多本地方法。序列化和反序列化从来不是一个好主意。